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