一:原因
最近线上服务器上总数间隔出现CPU占用过高导致服务访问异常,查看服务运行日志和系统日志没有找到具体由哪个进程导致的,于是规划写一个间隔监控CPU占用率最高的脚本来监控是哪个进程导致的CPU过高
二:间隔记录CPU占用率TOP的sh脚本
创建一个sh脚本文件log_cpu_process.sh
#!/bin/bash
# 设置日志文件
LOG_FILE="/data/log/log.log"
# 设置间隔时间(秒)
SLEEP_TIME=10
# 循环记录信息
while true; do
# 记录当前时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# 使用ps命令获取CPU使用率前10的进程,并输出到日志文件
ps H -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head -10 | awk '{print "'"$timestamp"', "$0}' >> $LOG_FILE
# 休眠指定时间
sleep $SLEEP_TIME
done
如上表示没间隔10秒将CPU占有率TOP10的进程信息存储到指定文件中
三:执行脚本
将log_cpu_process.sh文件执行可执行权限
chmod +x log_cpu_process.sh
运行脚本
./log_cpu_process.sh
以后台进程方式运行脚本
nohup log_cpu_process.sh > /dev/null 2>&1 &
四:现象
执行脚本后我们就可以在对应目录下看到生成的日志记录文件