ToolkitX
知识库工具箱

性能调优

CPU、内存、IO 性能分析与调优

35min·高级

01. 看清瓶颈——别瞎调

性能调优最忌讳「我觉得慢就加内存」。先定位瓶颈在哪儿——是 CPU 满了、内存不够、磁盘太慢、还是网络带宽吃紧?拿数据说话:
bash
top                    # 先看谁在吃 CPU 和内存
iostat -x 1            # 磁盘 IO 是不是瓶颈
vmstat 1               # 综合视图
sar -u 1               # CPU 使用详情
dstat                  # 全功能监控,一个顶五个(需安装)
nload                  # 实时网络流量
多数时候性能问题不是硬件不够,而是代码写得烂或配置不当。先查应用再找硬件。

02. CPU 与内存优化

CPU 满了?找到吃 CPU 的进程,看是正常业务高峰还是死循环。内存不够用?看看是不是某个进程在内存泄漏:
bash
# 找吃 CPU 最多的进程
ps aux --sort=-%cpu | head -5

# 找吃内存最多的进程
ps aux --sort=-%mem | head -5

# 清理缓存(内存紧张时)
sync && echo 3 > /proc/sys/vm/drop_caches

# 查看 swap 使用情况
free -h
swapon --show
cat /proc/sys/vm/swappiness   # 默认 60,值越大越爱用 swap

03. 磁盘与 IO 优化

磁盘慢分两种:吞吐量瓶颈(大文件读写慢)和 IOPS 瓶颈(大量小文件读写慢)。iostat 帮你分清楚:
bash
# 看磁盘繁忙程度
iostat -x 1
# %util 接近 100% → 磁盘真满了
# await 太高 → 磁盘响应慢
# r/s w/s 很高但 await 不高 → IOPS 瓶颈

# 找最吃 IO 的进程
iotop                     # 需安装,实时显示各进程的 IO 用量

# 检查文件系统
tune2fs -l /dev/sda1 | grep -i "block size"
cat /sys/block/sda/queue/scheduler  # IO 调度器

04. 网络与连接优化

并发量大时,默认的网络参数可能不够用。你可能会遇到「too many open files」这种经典的坑:
bash
# 查看当前连接数
ss -s
cat /proc/sys/net/core/somaxconn    # 最大监听队列长度

# 查看/修改文件描述符限制
ulimit -n                  # 当前限制
ulimit -n 65535            # 临时调大
cat /etc/security/limits.conf  # 永久修改

# 监控网络流量
nethogs eth0              # 按进程看流量(需安装)
iftop                     # 按连接看流量(需安装)

# 内核参数查看
sysctl -a | grep tcp      # 所有 TCP 相关内核参数

知识测验

1/4正确 0

iostat 的 %util 接近 100% 说明什么?

下一节

备份与恢复

下一节