我正在做一个研究项目,我们通常在服务器上启动一个作业,大约需要一两天的时间才能运行,然后我们再回顾结果。问题是,在某些情况下,我们耗尽了服务器的资源,这影响了我们的结果,因为有些作业会失败。
我想生成一份报告,我们可以回顾该报告以确定服务器资源是如何使用的,并将其与工作进行交叉引用。
我曾尝试使用 atop 来执行此操作(使用其原始文件格式),但在不同的机器上读取这种格式存在很多问题(即不同版本的 linux 或 atop 等)。
所以我想知道是否有更优雅的解决方案?最终,我需要能够深入了解每个进程级别的资源消耗,并查看用于实例化进程的命令(如 htop 中的命令列)。
答案1
你可以从
sar -f /var/log/sysstat/sa6
查看昨天的系统 daya
以及 vmstat
这使您能够开始将问题缩小到小时。从那里您可以开始查看服务器日志以查看是否存在错误。在日志上使用 grep 并查找您的进程名称和关键字,例如问题、错误。
答案2
你应该尝试一下nmon
,你可以从 EPEL 存储库获取它。
您可以安排一个 cron 作业来创建每日报告,例如这将在每天早上 7 点生成一份报告:
- name: nmon cron
cron:
name: "Generate nmon daily at 7:00"
minute: "0"
hour: "7"
job: "/bin/nmon -fT -s300 -c290 -m /root/nmon"
user: root
cron_file: nmon
报告的大小各不相同,例如第一个报告来自测试服务器,第二个报告来自 Oracle 生产服务器:
[root@xxxxxx379 ~]# du -sh nmon/xxxxxx379_201108_0700.nmon
316K nmon/xxxxxx379_201108_0700.nmon
[root@xxxx203 ~]# du -sh nmon/xxxx203_201108_0700.nmon
1.8M nmon/xxxx203_201108_0700.nmon
然后,您可以用多种方式绘制统计图表(输出为 csv)。