不。

不。

我检查了 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 列数据

  1. 中央处理器 %
  2. 进程号
  3. 用户名
  4. 命令运行
  5. 给命令运行的参数

在每个文件中,您将获得许多第一列中带有 0.0 的列表。擅长awksed可以在上面添加语法来过滤掉 0% cpu 进程。

正如所说,当进程发生时,您必须捕获进程,一旦进程完成,就没有 pid# 何时占用 %cpu 的记录。你必须做一个过程观察这样然后回去找到违法者。

答案3

可以在帮助下查看过去的 CPU/内存/磁盘/网络状态atop -r。然后按tT即可后退或前进。

答案4

这可以通过将命令的输出保存top在文件中来实现:

脚本:

NOW=`date "%y%m%d_%H%M%S"` ## to print the time.

echo "$NOW"
top > <PATH_TO_FILE>
exit 0

完成后,您可以将此脚本放入 cron 中以在特定内部运行!

相关内容