虽然我可能需要某种监控工具,例如 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
- 创建一个脚本将上述命令放入(例如
$HOME/bin/pscsv.sh
)中。 - chmod+x/path/to/pscsv.sh
crontab -e
并添加一行,类似于*/5 * * * * /path/to/pscsv.sh
根据您的喜好调整周期(此示例将每 5 分钟运行一次)。