如下所示,我有两台运行Ubuntu12.04的机器,我需要找出进程名以及它的pid,它的CPU使用率超过70%。
以下是作为示例的机器-
machineA
machineB
machineC
machineD我需要有我的shell脚本,它可以定期运行每15分钟,并检查是否有任何上述机器的CPU使用率超过70%。如果有任何机器的CPU使用率超过70%,则发送一封包含机器名称和进程名称及其id的电子邮件。
我将从machineX运行我的shell脚本,并且我已经为用户david设置了从machineX到上述所有机器的无密码ssh密钥。
进行所有这些监控的最佳方式是什么?
我有下面的命令,它可以让我的PID, %CPU and COMMAND name的进程的CPU使用率超过70%。
ps aux --sort=-%cpu | awk 'NR==1{print $2,$3,$11}NR>1{if($3>=70) print $2,$3,$11}'不确定如何完全自动化此过程?
发布于 2014-12-11 05:02:41
嘿,伙计们,你们做错了什么,cpu在当前的执行间隔中达到了峰值。这意味着在下一秒,这个进程可能不会消耗任何资源。最好使用一种不同的方法来赶上cpu耗尽的进程。我最喜欢的方式是cpu时间。看一下这个例子:
panos@wintermute:~$ ps xafu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 18:53 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 18:53 0:00 \_ [ksoftirqd/
root 5 0.0 0.0 0 0 ? S< 18:53 0:00 \_ [kworker/0:
root 7 0.0 0.0 0 0 ? S 18:53 0:02 \_ [rcu_sched]TIME:是进程吃bean的cpu时间。正常进程不需要占用太多cpu进程。因此,通过创建一个简单的shell脚本和一个小循环,您可以收集所需的信息。shell脚本可能如下所示:
#!/bin/sh
date
for i in "a b c d" ; do
echo machine${i}
ssh machine${i} ps xau|awk 'NR==1{print $2,$10,$11}NR>1{if($10>=5) print $2,$10,$11}'
echo -- --
done
exit这将与bean占用5分钟cpu任何进程相匹配
发布于 2014-12-11 05:32:56
AWK做面向行的编辑(还有很多其他的东西)。括在括号{}中的语句块将在input.This行为的每一行上执行,这可能会受到限制,方法是在块前面加上一个条件(在普通C语法中)
NR==1 {}表示块将在第一个输入行上执行。在上面的示例中,第一个输入行中的字段2、10和11将打印在单行上。NR>1 {}表示将对第一行之后的每一行执行块。
https://stackoverflow.com/questions/27410501
复制相似问题