我們如何診斷一個耗資源的神秘進程?
作者:李華
查看系統總體狀態top 或 htop:實時查看 CPU、內存使用情況。iotop:查看 IO 使用情況(需要 root 權限)。vmstat:檢查 CPU、內存、磁盤 IO 等性能指標。
如何診斷占用過多 CPU、內存和 IO 等資源的神秘進程?
下圖說明了 Linux 系統中的有用工具。
圖片
01 初步排查
1. 查看系統總體狀態
- top 或 htop:實時查看 CPU、內存使用情況。
- iotop:查看 IO 使用情況(需要 root 權限)。
- vmstat:檢查 CPU、內存、磁盤 IO 等性能指標。
2. 找出占用資源的主要進程
- 使用 ps 查找占用最多資源的進程:
ps aux --sort=-%cpu | head -n 10 # 按 CPU 使用排序
ps aux --sort=-%mem | head -n 10 # 按內存使用排序
- 使用 pidstat 查看進程的 CPU、內存和 IO 使用:
pidstat -p ALL 1
- 使用 lsof 查看特定進程打開的文件描述符
lsof -p <PID>
02 具體分析問題進程
確定高資源使用進程后,進一步診斷其行為。
1. 檢查進程是否存在高 CPU 占用
- 使用 perf top 或 perf record(Linux)分析 CPU 熱點。
- 使用 strace 查看進程的系統調用:
strace -cp <PID>
- 檢查是否存在線程死循環:
top -H -p <PID>
- 查看堆棧信息:
gstack <PID> # Linux
2. 檢查內存泄漏或異常
- 使用 pmap 查看進程內存分布:
pmap -x <PID>
- 使用 smem 分析進程的內存使用:
smem -P <ProcessName>
- 檢查內存增長趨勢:
watch -n 1 cat /proc/<PID>/status
3. 分析 IO 使用
- 使用 iotop 或 iostat 查看磁盤 IO:
iotop -o # 查看 IO 活躍的進程
iostat -x 1 # 查看詳細的磁盤 IO 性能
- 使用 strace 查看進程是否頻繁調用 IO 系統調用:
strace -p <PID> -e trace=open,read,write,fsync
4. 網絡活動分析
- 使用 netstat 或 ss 查看網絡連接:
netstat -plant | grep <PID>
- 使用 tcpdump 捕獲網絡流量:
tcpdump -i eth0 port <PORT>
- 使用 iftop 實時監控網絡帶寬占用
責任編輯:武曉燕
來源:
ByteByteGo