智汇百科
霓虹主题四 · 更硬核的阅读氛围

Linux调试过程实战指南

发布时间:2025-12-16 01:09:42 阅读:28 次

从卡住的服务器说起

上周三晚上,公司一台运行订单服务的Linux服务器突然响应变慢,SSH登录都卡得不行。运维同事第一反应是看CPU和内存,top命令一跑,发现某个Java进程占了90%以上的CPU。这时候就得上调试手段了。

定位问题进程

先用ps找到具体进程ID:

ps aux | grep java

拿到PID后,可以结合top -p实时观察资源占用变化。如果怀疑是死循环或线程阻塞,下一步就该查线程状态了。

查看线程堆栈信息

对于Java应用,jstack是个好帮手:

jstack <PID>

输出里能看到哪些线程在RUNNABLE、BLOCKED还是WAITING状态。有一次我们发现一个线程一直在执行同一个方法调用,明显是代码逻辑出问题了。

系统级跟踪工具strace

不是所有程序都是Java写的。有个Python脚本跑着跑着就卡住,看不到日志输出。这时候用strace能看清它到底在干什么:

strace -p <PID>

屏幕上刷出一堆read调用,一直返回0,说明程序在等输入但没人给。原来是启动时漏了重定向标准输入。

网络问题怎么查

服务连不上数据库?别急着重启。先看看端口通不通:

netstat -tulnp | grep 3306

或者更现代一点的ss命令:

ss -tulnp | grep 3306

要是发现本地没监听,再查防火墙规则:

iptables -L -n | grep 3306

有一次就是中间机器开了防火墙,挡了数据库端口,开发还以为是代码配置错了。

日志永远是第一线索

/var/log/目录别忽略。messages、syslog、dmesg这些文件经常藏着关键信息。比如一次内核报错显示磁盘I/O异常,顺着查下去才发现是RAID阵列有块硬盘快挂了。

用tail实时盯着日志也很常见:

tail -f /var/log/nginx/error.log

刷新网页的同时看日志有没有新条目,能快速判断是不是请求触发了错误。

小工具大用途

lsof看文件句柄:

lsof -i :8080

df查磁盘空间,du看目录大小。有次网站打不开,一查df结果根分区100%满了,清掉几个旧日志立马恢复。

调试不一定要复杂工具,组合使用基础命令往往最快见效。关键是清楚每一步想验证什么,而不是盲目敲命令。”}