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

系统诊断与监控 (了解现状是优化的第一步)
在优化之前,必须先了解系统的瓶颈在哪里(CPU、内存、I/O 还是网络)。
整体系统概览
-
top/htoptop: 经典的实时任务管理器,按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
(图片来源网络,侵删)- 报告进程、内存、分页、块 I/O、 traps 以及 CPU 活动情况,重点关注
us(用户进程CPU)、sy(系统调用CPU)、id(空闲CPU)、wa(等待I/O的CPU)。
vmstat 1 # 每秒刷新一次,共显示一次
- 报告进程、内存、分页、块 I/O、 traps 以及 CPU 活动情况,重点关注
-
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
(图片来源网络,侵删)- 显示 CPU 和设备 I/O 统计信息。
-x参数显示扩展统计信息,如%util(设备利用率)。
iostat -xz 1 # 每秒刷新,显示扩展信息
- 关键指标:
%util: 如果持续接近 100%,说明 I/O 已经成为瓶颈。await: 平均等待时间,时间越长说明 I/O 压力越大。
- 显示 CPU 和设备 I/O 统计信息。
-
dstat- 一个全能的系统资源统计工具,可以同时显示 CPU、磁盘、网络、内存等。
dstat -tcdng --disk-util --top-io # 显示时间、CPU、磁盘、网络、磁盘利用率、最繁忙的I/O进程
网络诊断
-
netstat/ssss是netstat的现代替代品,速度更快,信息更全。- 查看网络连接状态:
# 显示所有TCP连接,按状态排序 ss -t -a -n | awk '{print $1}' | sort | uniq -c # 查找占用大量端口的进程 ss -tulpn -
iftop/nethogsiftop: 按主机显示网络带宽使用情况。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已经集成了cgroupsv2。
# 示例:限制 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 |
定期执行 update 和 upgrade |
最后强调:任何修改前请务必备份重要数据和配置文件! 先在测试环境中验证,再应用到生产环境,优化是一个持续的过程,需要根据监控数据不断调整。
