在实际工作中,偶尔会遇到系统的CPU使用率和系统平均负载很高,但却找不到高CPU的应用;
产生这个问题的原因:进程有可能在不断的崩溃、重启
通过uptime发现系统负载很高,但是通过top,mpstat,pidstat,perf等工具很难发现是什么进程导致了系统负载和CPU使用率很高;
注:通过上面工具的判断,即不是CPU密集型,也不存在IO等待,也不存在进程、线程争用的情况
execsnoop-专门用于为追踪短时进程(瞬时进程)设计的工具;
它通过 ftrace 实时监控进程的 exec() 行为,并输出短时进程的基本信息,包括进程 PID、父进程 PID、命令行参数以及执行的结果。
github地址:https://github.com/brendangregg/perf-tools/blob/master/execsnoop
如何安装使用:将上面的github的内容复制,然后写入execsnoop文件,并且加上x权限即可;
使用方法:
#./execsnoop 59187 59186 /usr/local/bin/stress -t 1 -d 1 59188 28775 <...>-59188 [000] d... 40067.137167: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59191 59188 /usr/local/bin/stress -t 1 -d 1 59190 28778 <...>-59190 [003] d... 40067.138913: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59192 28776 <...>-59192 [003] d... 40067.139103: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59194 59192 /usr/local/bin/stress -t 1 -d 1 59196 59190 /usr/local/bin/stress -t 1 -d 1 59198 28770 <...>-59198 [001] d... 40067.145500: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59199 28779 <...>-59199 [001] d... 40067.146228: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59200 59198 /usr/local/bin/stress -t 1 -d 1 59202 59199 /usr/local/bin/stress -t 1 -d 1 59204 28778 <...>-59204 [002] d... 40067.155150: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59206 28775 <...>-59206 [001] d... 40067.157282: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59208 59206 /usr/local/bin/stress -t 1 -d 1 59209 28770 <...>-59209 [003] d... 40067.158381: execsnoop_sys_execve: (SyS_execve+0x0/0x30) 59205 59204 /usr/local/bin/stress -t 1 -d 1 59207 28776 <...>-59207 [002] d... 40067.158882: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
可以看到有大量的stress进程,不断的在启用,造成系统的负载和CPU使用率升高;