有Exadata客户在进行exachk巡检之后反馈,发现系统中,exachk进程占用了大量CPU资源。
了解之前的变更,只是巡检之前升级了AHF,然后进行标准的exachk巡检。
现象:
目前机器整体CPU使用率是20%+,但被使用到的具体CPU core基本都是满负荷,都是这些exachk进程,这些进程初步判断的确是有异常,正常不会运行这么久都不结束。
解决:
首先,依据 文档 How to disable TFA autostart on Exadata (Doc ID 2516169.1)
# /etc/init.d/init.tfa shutdown
# /etc/init.d/init.tfa disable
关闭了tfa服务之后,发现进程依然存在。
可以尝试正常停止,先启动tfa,使用tfactl尝试将exachk进程停止:
/etc/init.d/init.tfa enable
/etc/init.d/init.tfa start
tfactl stop exachk
验证进程是否停止成功:
ps -ef|grep exachk
发现进程依然存在。
没办法,只能采用强行kill的方式,反复确认需要kill的进程PID信息,均是exachk,然后进行kill:
kill -9 xxxxxx
kill -9 xxxxxx
...
这样就完成 kill 所有异常exachk进程,CPU使用率也随之恢复正常。
目前tfa服务也保持启动状态,为了后续再观察,如有问题复现再具体分析。
针对异常的进程可以kill,但是需反复确保要操作kill的进程完全不会影响到正常生产运行。
记录一次开发中遇到的关于 ThreadLocal 问题,场景是数据库表中的操作人总是无缘无故的被更改,排查了几遍代码才发现是 ThreadLocal 没有及时清理导致的。