诊断进程故障是一个系统化的过程,涉及多个方面的检查和验证。以下是一些关键步骤和方法:
查看系统总体状态:
top
或 htop
命令实时查看 CPU、内存使用情况。iotop
查看 IO 使用情况(需要 root 权限)。vmstat
检查 CPU、内存、磁盘 IO 等性能指标。找出占用资源的主要进程:
ps aux --sort=-%cpu
按 CPU 使用排序查看占用最多资源的进程。ps aux --sort=-%mem
按内存使用排序查看占用最多资源的进程。pidstat
查看进程的 CPU、内存和 IO 使用情况。检查进程是否存在高 CPU 占用:
perf top
或 perf record
分析 CPU 热点。strace
查看进程的系统调用。top -H -p <PID>
查看堆栈信息。检查内存泄漏或异常:
pmap
查看进程内存分布。smem
分析进程的内存使用。watch -n 1 cat /proc/<PID>/status
检查内存增长趋势。分析 IO 使用:
iotop -o
查看 IO 活跃的进程。iostat -x 1
查看详细的磁盘 IO 性能。strace -p <PID> -e trace=open,read,write,fsync
查看进程是否频繁调用 IO 系统调用。网络活动分析:
netstat
或 ss
查看网络连接。tcpdump
捕获网络流量。iftop
实时监控网络带宽占用。查看应用程序日志:检查应用程序的日志文件,这些文件通常记录了详细的错误信息和堆栈跟踪,有助于快速定位问题根源。
系统日志分析:查看 /var/log/syslog
或者 /var/log/messages
,分析有没有突发事件的记录。
JVM 致命错误日志:查找以 “hs_err_pid” 开头的日志文件,这些文件记录了 JVM 崩溃时的详细信息。
free
命令查看内存使用情况,检查是否有内存泄漏。top
、vmstat
、df -h
等命令检查 CPU 和磁盘的使用情况。ps
命令查看进程状态,如运行状态(R)、睡眠状态(S)、僵尸状态(Z)等,判断进程是否正常。通过上述步骤,可以系统地诊断和解决进程故障。每个步骤都提供了具体的方法和命令,帮助快速定位问题所在。