Linux系统性能如何监控?

话题来源: SSH 登录延迟 10 秒以上的排查步骤

说实话,每次看到SSH登录卡在那边转圈圈,我都恨不得直接重启服务器。但后来发现,这种“暴力解法”往往治标不治本。其实系统性能问题就像温水煮青蛙,等到SSH都出现明显延迟时,往往其他隐患已经存在很久了。要真正掌握系统状态,得学会在日常就做好性能监控——这可比临时抱佛脚管用多了。

系统监控的“三板斧”

我常用的监控组合是top、vmstat和iostat。top命令大家都熟,但很多人只盯着CPU和内存看。有次我通过top的进程列表发现某个Java应用持续占用200%的CPU(对,超过100%是因为多核),这才定位到是线程死循环。而vmstat 1 5这种用法(每秒采样一次,共5次)能快速捕捉到系统瓶颈,特别是swapsi/so这两列,一旦发现频繁交换,内存不足的问题就藏不住了。

说到磁盘性能,iostat -x 1真是帮了大忙。有回监控到%util持续90%以上,await时间飙到200ms,仔细检查才发现是某个日志文件疯狂写入。你看,这些工具结合起来用,就像给系统做了个“全身体检”。

内存监控的隐藏陷阱

free -m显示的内存使用情况有时会骗人!Linux会利用空闲内存做磁盘缓存,所以看到used很高别急着慌。关键要看available这一项,它才反映真正可用的内存。我有次遇到系统频繁OOM(内存溢出),free显示还剩2G,但available只有200M——原来是缓存占了大头,实际可用内存所剩无几。

还有个容易忽略的点:/proc/meminfo里的Slab内存。曾经有台服务器SReclaimable(可回收Slab)积累了8G,导致虽然内存没满,但新进程就是申请不到内存。定期echo 2 > /proc/sys/vm/drop_caches清理缓存才解决问题。

网络性能不能只看带宽

用iftop看实时流量确实直观,但网络性能问题往往藏在细节里。比如TCP重传率就是个关键指标,通过netstat -s | grep -i retrans查看,如果重传率超过1%,网络质量可能就有问题了。有次排查SSH卡顿,就是发现重传率高达5%,最后确认是交换机端口故障。

连接数监控也很重要。ss -ant | grep ESTAB | wc -l这个命令我经常用,某次发现ESTABLISHED连接数异常达到5万,查出来是某个服务没设置连接超时。这些工具用熟了,就像有了“火眼金睛”。

性能监控真的是一门学问,需要长期积累经验。我现在养成了习惯,每天早上一到公司就先看眼监控面板。毕竟,预防总比抢救来得轻松,你说是不是?

评论

  • 学到了!top命令原来还能看多核CPU占用,之前一直没注意这个细节👍