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,值越大越爱用 swap03. 磁盘与 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% 说明什么?
下一节
下一节 备份与恢复