如何找到哪些后台任务占用了我大部分的内存和 CPU 时间?

如何找到哪些后台任务占用了我大部分的内存和 CPU 时间?

虽然我可能需要某种监控工具,例如 mon 或 sysstat 之类的。我正在寻找一种方法来了解哪些任务占用了我最多的内存、CPU 时间等。

虽然我知道每台工作站/台式机都是独一无二的,但我的一台台式机上的典型工作负载如下所示:

  • 单个用户(即使可以选择拥有多个用户)
  • 游戏 - Aisleriot、kshisen
  • 洪流客户端 - qbittorrent
  • 邮件客户端——雷鸟
  • 消息传递客户端 - empathy、telegram 和 quasselcore 和客户端。
  • 浏览器 - Firefox,有时还有 Tor
  • 桌面-MATE
  • 媒体播放器 - 大部分时间是 mpv

大多数时候工作负载通常很轻,但我仍然看到硬盘传感器亮起,这意味着即使没有前台任务发生,一些后台任务正在集中进行。虽然我可以使用 top 来查找哪些任务占用了大部分 CPU 和内存周期,但这只是暂时的。我意识到我需要一些可以在一段时间内(比如一天)计算出来的东西,在后台运行并生成足够好的图表来分析,最重要的是在用户定义的位置(比如 /home)中拥有原始数据/shirish/mon 或任何目录名称。如果是 /var/log//logs 就可以了。

我只需要知道几件事:

  • 哪些进程会随着时间的推移占用内存和 CPU、前台进程和后台进程。
  • 哪些后台进程占用大部分CPU和内存
  • 日志记录是可调的,每 2-5 分钟拍摄一次快照。

我确信人们已经用一些工具和方法为服务器等做到了这一点,但是有人为上述场景做过吗?如果是,他们是怎么做的?

答案1

//List Processes
ps -la

//Display All Network Activity
nettop

cron 任务将是最直接的方法。
使用管道将输出重定向到所需的环境/路径

答案2

例如,您可以使用 cron 每隔一段时间运行以下命令X分钟:

ps --no-headers -eo "uname fname %cpu %mem" | sed -e 's/ \+/,/g' | sed "s/^/$(date --iso-8601='minutes'),/g" >> /path/to/ps.csv

ps根据需要调整字段。

然后,您可以使用电子表格软件、gnuplot 或类似软件使用输出文件来绘制使用情况图表。

如何添加到crontab

  1. 创建一个脚本将上述命令放入(例如$HOME/bin/pscsv.sh)中。
  2. chmod+x/path/to/pscsv.sh
  3. crontab -e并添加一行,类似于*/5 * * * * /path/to/pscsv.sh根据您的喜好调整周期(此示例将每 5 分钟运行一次)。

相关内容