我检查了 sar 报告,发现 CPU 和内存在特定时间(例如一天前)的利用率更高。
是否有可能找到哪个进程占用了很多 CPU 和内存?我们如何找到哪个进程正在消耗内存和 CPU。
答案1
不。
除非您设置了一些(复杂的)监控,否则一旦进程退出,您将无法找出哪个进程使用了 CPU。
没有像桌子这样的“标准”东西
exec path;exec name;stime,etime,%sys,%io,%wait,%idle,...
您必须在执行期间捕获该进程。
答案2
crontab -e
# min hr day month day_of_week
# every minute run :
1 * * * * /root/watch_processes.sh
手动执行一次:mkdir /root/process_watch
创建简单的脚本/root/watch_processes.sh
#!/bin/bash
# %cpu pid command args
ps -eo "%C %P %U %c %a" > /root/process_watch/`date +%Y%m%d_%H%M`
上述命令将每分钟创建一个文本文件,仅以日期作为文件名,但它们都将位于给定的文件夹下,在上面的例子中为/mkdir/process_watch
。 相应地进行调整。
http://linuxcommand.org/lc3_man_pages/ps1.html
ps -eo
根据需要调整每个进程的输出,使用%C %P %U %c %a
将产生这 5 列数据
- 中央处理器 %
- 进程号
- 用户名
- 命令运行
- 给命令运行的参数
在每个文件中,您将获得许多第一列中带有 0.0 的列表。擅长awk
或sed
可以在上面添加语法来过滤掉 0% cpu 进程。
正如所说,当进程发生时,您必须捕获进程,一旦进程完成,就没有 pid# 何时占用 %cpu 的记录。你必须做一个过程观察这样然后回去找到违法者。
答案3
可以在帮助下查看过去的 CPU/内存/磁盘/网络状态atop -r
。然后按t或T即可后退或前进。
答案4
这可以通过将命令的输出保存top
在文件中来实现:
脚本:
NOW=`date "%y%m%d_%H%M%S"` ## to print the time.
echo "$NOW"
top > <PATH_TO_FILE>
exit 0
完成后,您可以将此脚本放入 cron 中以在特定内部运行!