使用 strace 解决 twagent 狂耗 CPU 问题
最近一段时间, 经常发现生产环境上有些服务器的 CPU 使用率比其它高很多. 检查下来, 都不是我们自己的应用程序导致的, 细分下来有两种, 一种是 puppet agent 导致的(诊断 puppet agent 导致的 CPU 使用率非常高的问题), 另外一种就是 twagent 导致的.
-
首先, 通过 top -i -H 可以看到这个进程十分耗 CPU
-
然后, 通过 ps aux | grep twagent | less -w 可以看到它是怎么被启动的
xiatian 28604 0.0 0.0 10476 2084 pts/7 S+ 03:33 0:00 grep --color=auto twagent
root 31695 31.9 0.0 494272 11340 ? Ssl May22 60485:45 /opt/tripwire/agent/twagent --service.mode=true --service.type=SysV --agent.dir=/opt/tripwire/agent --plugins.dir=/opt/tripwire/agent/plugins --tools.dir="/opt/tripwire/agent/tools" --data.dir="/var/cache/tripwire" --lock.dir="/var/lock/tripwire" --log.dir="/var/log/tripwire" --spool.dir="/var/spool/tripwire" -
然后, 执行 sudo strace -C -e trace=all -p 31794 (这里一定是要那个耗CPU 的线程, 不是进程号), 可以看到N多这样的 event:
statfs("/var/spool/tripwire", 0x7fe61a247450) = -1 ENOENT (No such file or directory)
statfs("/var/spool/tripwire", 0x7fe61a247450) = -1 ENOENT (No such file or directory) -
然后执行 添加文件夹 (我这里是 root 起的这个进程, 所以用 root 加一个文件夹)
sudo mkdir /var/spool/tripwire
-
然后呢, 问题消失了