菜鸟科技网

Linux系统优化命令有哪些?如何高效利用命令提升系统性能与资源利用率?

下面我将从系统诊断、核心资源优化、文件系统与I/O、网络、服务与安全等多个维度,为您梳理常用的 Linux 优化命令和思路。

Linux系统优化命令有哪些?如何高效利用命令提升系统性能与资源利用率?-图1
(图片来源网络,侵删)

系统诊断与监控 (了解现状是优化的第一步)

在优化之前,必须先了解系统的瓶颈在哪里(CPU、内存、I/O 还是网络)。

整体系统概览

  • top / htop

    • top: 经典的实时任务管理器,按 1 可以查看每个核心的 CPU 使用率,按 M 按内存排序,按 P 按 CPU 排序。
    • htop: top 的增强版,界面更友好,支持鼠标操作,彩色显示,推荐使用,如果系统没有,可以用 sudo apt install htop (Debian/Ubuntu) 或 sudo yum install htop (CentOS/RHEL) 安装。
    # htop
  • uptime

    • 显示系统运行时间、登录用户数以及系统负载(1分钟、5分钟、15分钟的平均负载),负载值最好小于 CPU 核心数。
    uptime

CPU 诊断

  • vmstat

    Linux系统优化命令有哪些?如何高效利用命令提升系统性能与资源利用率?-图2
    (图片来源网络,侵删)
    • 报告进程、内存、分页、块 I/O、 traps 以及 CPU 活动情况,重点关注 us (用户进程CPU)、sy (系统调用CPU)、id (空闲CPU)、wa (等待I/O的CPU)。
    vmstat 1  # 每秒刷新一次,共显示一次
  • mpstat

    • 显示每个可用 CPU 的单独统计信息,多核系统下更有用。
    mpstat -P ALL 1

内存诊断

  • free

    • 显示系统内存使用情况。-h 参数以人类可读格式显示(KB, MB, GB)。
    free -h
    • 关键指标:
      • Mem.available: 可用内存(包括 buffer/cache),比 free 更准确。
      • buff/cache: 缓冲和缓存,这部分内存可以被程序随时回收。
      • Swap: 交换空间,si (swap in) 和 so (swap out) 频繁发生,说明物理内存不足。
  • smem

    • 更精确地计算进程的实际内存占用,区分 PSS (Proportional Set Size) 和 USS (Unique Set Size),能有效发现内存泄漏的元凶。
    sudo apt install smem  # 安装
    smem -t -k  # 按总内存使用量排序

磁盘 I/O 诊断

  • iostat

    Linux系统优化命令有哪些?如何高效利用命令提升系统性能与资源利用率?-图3
    (图片来源网络,侵删)
    • 显示 CPU 和设备 I/O 统计信息。-x 参数显示扩展统计信息,如 %util (设备利用率)。
    iostat -xz 1  # 每秒刷新,显示扩展信息
    • 关键指标:
      • %util: 如果持续接近 100%,说明 I/O 已经成为瓶颈。
      • await: 平均等待时间,时间越长说明 I/O 压力越大。
  • dstat

    • 一个全能的系统资源统计工具,可以同时显示 CPU、磁盘、网络、内存等。
    dstat -tcdng --disk-util --top-io  # 显示时间、CPU、磁盘、网络、磁盘利用率、最繁忙的I/O进程

网络诊断

  • netstat / ss

    • ssnetstat 的现代替代品,速度更快,信息更全。
    • 查看网络连接状态:
    # 显示所有TCP连接,按状态排序
    ss -t -a -n | awk '{print $1}' | sort | uniq -c
    # 查找占用大量端口的进程
    ss -tulpn
  • iftop / nethogs

    • iftop: 按主机显示网络带宽使用情况。
    • nethogs: 按进程显示网络带宽使用情况。
    sudo apt install iftop nethogs
    iftop -i eth0  # 监控指定网卡
    nethogs

核心资源优化

CPU 优化

  • 调整进程优先级 (nice / renice)

    • 为重要进程分配更高的优先级(更小的 nice 值,范围 -20 到 19)。
    # 启动一个新进程,优先级为 -10 (比默认高)
    nice -n -10 my_important_process
    # 修改一个已存在进程的优先级
    renice -n -10 -p <PID>
  • CPU 绑定 (taskset)

    • 将进程绑定到特定的 CPU 核心,可以减少缓存失效,提高性能。
    # 将进程ID为123的进程绑定到CPU核心0和1上
    taskset -cp 0,1 123
  • 调整内核调度器参数

    • 通过修改 /etc/sysctl.conf 调整内核参数,对于 I/O 密集型应用,可以调整 vm.swappiness

内存优化

  • 调整 swappiness

    • 控制内核使用交换空间的倾向,值从 0 到 100,默认是 60,对于内存充足的服务器,可以降低该值,减少磁盘 I/O。
    # 查看当前值
    cat /proc/sys/vm/swappiness
    # 临时设置 (重启后失效)
    sudo sysctl vm.swappiness=10
    # 永久设置 (编辑 /etc/sysctl.conf)
    echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  • 清理缓存

    • 警告:这会丢弃页面缓存和目录项/ inode,可能导致 I/O 短暂飙升,仅在紧急情况下使用。
    # 清空页面缓存
    echo 1 | sudo tee /proc/sys/vm/drop_caches
    # 清空目录项和 inode
    echo 2 | sudo tee /proc/sys/vm/drop_caches
    # 全部清空
    echo 3 | sudo tee /proc/sys/vm/drop_caches
  • 使用 cgroups 进行资源限制

    • cgroups 是 Linux 内核的一个功能,可以限制、记录和隔离进程组所使用的物理资源。systemd 已经集成了 cgroups v2。
    # 示例:限制 myservice.service 最多使用 1GB 内存和 50% 的 CPU
    sudo systemctl edit myservice.service

    在打开的编辑器中添加:

    [Service]
    MemoryMax=1G
    CPUQuota=50%

磁盘 I/O 优化

  • 调整 I/O Scheduler

    • 内核有不同的 I/O 调度算法,适用于不同场景。
    • noop: 适用于 SSD 或虚拟化环境。
    • deadline: 通用性较好,能提供稳定的性能。
    • cfq (完全公平排队): 默认值,适用于桌面系统,追求低延迟。
    # 查看当前设备的调度器
    cat /sys/block/sda/queue/scheduler
    # 临时修改 (以 sda 为例)
    echo noop | sudo tee /sys/block/sda/queue/scheduler
    # 永久修改 (创建 udev 规则)
    echo 'ACTION=="add", KERNEL=="sda", ATTR{queue/scheduler}="noop"' | sudo tee /etc/udev/rules.d/99-scheduler.rules
    sudo udevadm control --reload-rules && sudo udevadm trigger
  • 文件系统挂载选项

    • /etc/fstab 中调整挂载参数,对于 SSD,可以启用 noatime
    # 将 /dev/sda1 挂载到 /data,使用 noatime 选项
    UUID=... /data ext4 defaults,noatime,discard 0 0
    • noatime: 不更新文件的访问时间,减少磁盘写入。
    • nodiratime: 不更新目录的访问时间。
    • discard: 对 SSD 启用 TRIM 命令,有助于保持性能。

网络优化

  • 增加文件描述符限制

    • 高并发服务器(如 Nginx, Node.js)需要大量文件描述符。
    # 查看当前限制
    ulimit -n
    # 临时修改 (对当前 shell 及其子进程生效)
    ulimit -n 65535
    # 永久修改 (编辑 /etc/security/limits.conf)
    echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
    echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
  • 调整内核 TCP 参数

    • 编辑 /etc/sysctl.conf,添加以下参数来优化网络连接。
    # 增加最大 TCP 连接数
    net.core.somaxconn = 65535
    # 增加最大监听队列长度
    net.ipv4.tcp_max_syn_backlog = 65535
    # 启用快速回收 TIME_WAIT 状态的连接
    net.ipv4.tcp_tw_reuse = 1
    # 减少处于 FIN_WAIT_2 状态的时间
    net.ipv4.tcp_fin_timeout = 10
    # 开启 TCP BBR 拥塞控制算法 (对高延迟、高带宽网络特别有效)
    net.core.default_qdisc = fq
    net.ipv4.tcp_congestion_control = bbr

    修改后执行 sudo sysctl -p 使其生效。


服务与安全优化

  • 禁用不必要的服务

    • 减少系统资源占用,降低安全风险。
    # 查看所有服务状态
    systemctl list-units --type=service --state=running
    # 禁用并停止一个服务 (如蓝牙服务)
    sudo systemctl disable bluetooth.service
    sudo systemctl stop bluetooth.service
  • 定期更新系统

    • 确保系统安全,并获取最新的性能改进。
    # Debian/Ubuntu
    sudo apt update && sudo apt upgrade -y
    # CentOS/RHEL/Fedora
    sudo yum update -y
    # 或 (新版本)
    sudo dnf update -y
  • 配置防火墙

    • 使用 ufw (Uncomplicated Firewall) 或 firewalld 只开放必要的端口。
    # 使用 ufw (Debian/Ubuntu)
    sudo ufw allow 22/tcp   # 允许SSH
    sudo ufw allow 80/tcp   # 允许HTTP
    sudo ufw enable

自动化与脚本

将常用的监控和优化命令组合成脚本,可以大大提高效率,创建一个 system_check.sh

#!/bin/bash
echo "===== System Health Check ====="
echo "Uptime & Load:"
uptime
echo -e "\n===== Memory Usage ====="
free -h
echo -e "\n===== Disk Usage ====="
df -h
echo -e "\n===== Top 10 CPU Processes ====="
ps aux --sort=-%cpu | head -n 11
echo -e "\n===== Top 10 Memory Processes ====="
ps aux --sort=-%mem | head -n 11
echo -e "\n===== Network Connections (State) ====="
ss -t -a -n | awk '{print $1}' | sort | uniq -c

给脚本执行权限后,就可以随时运行 ./system_check.sh 来快速了解系统状态。

优化目标 核心命令/工具 关键参数/配置
监控诊断 htop, vmstat, iostat, free, ss CPU/内存/I/O/网络使用率,进程状态
CPU优化 nice, renice, taskset 进程优先级,CPU核心绑定
内存优化 sysctl (swappiness), cgroups vm.swappiness, MemoryMax
I/O优化 echo (scheduler), /etc/fstab noop/deadline调度器, noatime
网络优化 sysctl, ulimit net.core.somaxconn, tcp_tw_reuse, nofile
服务优化 systemctl 禁用不必要服务
安全更新 apt, yum, dnf 定期执行 updateupgrade

最后强调任何修改前请务必备份重要数据和配置文件! 先在测试环境中验证,再应用到生产环境,优化是一个持续的过程,需要根据监控数据不断调整。

分享:
扫描分享到社交APP
上一篇
下一篇