Shell
如何找出分叉很多的程序?
最近我在我們的伺服器上遇到了負載過高的問題。我看了
top
大概半個小時,才發現是 Nagios 分叉了很多短暫的程序。彈起 Nagios 後,一切恢復正常。我的問題是,如何更快地找出像這樣分叉的根程序?
謝謝。
如果您執行支持 的作業系統
dtrace
,此腳本將幫助您確定哪些程序正在啟動短期程序:#!/usr/sbin/dtrace -qs proc:::exec { self->parent=stringof((unsigned char*)curpsinfo->pr_psargs); } proc:::exec-success /self->parent != NULL/ { printf("%s -> %s\n",self->parent,curpsinfo->pr_psargs); self->parent=NULL; }
如果您使用的是沒有
dtrace
支持的作業系統,請查看替代方案,例如使用 Linuxsystemtap
或使用 AIX。sysdig
ProbeView
這是一個
sysdig
腳本,它將顯示所有命令的啟動和退出時間及其pid
和ppid
:sysdig -p"*%evt.time %proc.pid %proc.ppid %evt.dir %proc.exeline" \ "( evt.dir=< and evt.type=execve ) or evt.type=procexit"
另一種方法是使用您的作業系統啟用程序記帳(如果可用,通常是
acct
Linux 下的軟體包)並查看生成的日誌。還有一個top
類似的程序可以利用流程記帳:atop。