CPU 使用服务器和监控信息
CPU Usage Server and Monitoring info
我需要使用 shell 脚本检查,可能没有安装任何特定的软件包 (OS:Linux Suse 12), 总计 CPU % usage 以便在不超过临界阈值的情况下监控级别。
这是一台 2x E5-2667 v4 8/核心的大型服务器。
查看问题我发现了一些东西并尝试了它:
1-top -bn1 | grep "Cpu(s)" | \sed "s/.*, *\([0-9.]*\)%* id.*//" | \awk '{print 100 - "%"}'
2-CPU_LOAD=$(sar -P ALL 1 2 |grep 'Average.*all' |awk -F" " '{print 100.0 -$NF}')
我还尝试从 iostat 执行 100-idle
- 这在多 cpu/multi 核心系统上真的正确吗?
- 使用正常运行时间的 cpu 负载计算 cpu 总使用量是否正确?
使用代码我得到了单核的平均值,而我需要一个总 CPU 的结果,用在 %
问候,
谢谢
您最好完全在 awk 中实施该解决方案:
top -bn1 | awk -F, '/id/ { for (i=1;i<=NF;i++) { if ( $i ~ /[[:digit:]]{2}.[[:digit:]][[:blank:]]+id/ ) { split($i,arry," ");print arry[1]" - idle" }'
从 top 获取输出,然后检查是否有任何包含 id 的输出。如果满足条件,则取行中每个逗号分隔的数据,并针对 2 个数字进行模式匹配,一个小数,然后是一个或多个数字,一个空格,然后是 id。如果是这种情况,将基于空白space的变量拆分为数组并打印第一个元素。
您也可以查看 uptime
。
Uptime 一行显示以下信息。当前时间、系统已运行多长时间 运行、当前登录用户数以及过去 1、5 和 15 分钟的系统平均负载。
如果您想获得任何详细的统计数据,您也可以使用 perf
。
在此示例中,您可能会看到 1 秒内所有 CPU 个周期的数量:
-bash-4.1# perf stat -a sleep 1
Performance counter stats for 'system wide':
4002.822144 task-clock (msec) # 3.999 CPUs utilized (100.00%)
22809 context-switches # 0.006 M/sec (100.00%)
1332 cpu-migrations # 0.333 K/sec (100.00%)
23794 page-faults # 0.006 M/sec
5409531172 cycles # 1.351 GHz (100.00%)
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
3874289082 instructions # 0.72 insns per cycle (100.00%)
715152901 branches # 178.662 M/sec (100.00%)
20583742 branch-misses # 2.88% of all branches
1.001065623 seconds time elapsed
我需要使用 shell 脚本检查,可能没有安装任何特定的软件包 (OS:Linux Suse 12), 总计 CPU % usage 以便在不超过临界阈值的情况下监控级别。
这是一台 2x E5-2667 v4 8/核心的大型服务器。
查看问题我发现了一些东西并尝试了它:
1-top -bn1 | grep "Cpu(s)" | \sed "s/.*, *\([0-9.]*\)%* id.*//" | \awk '{print 100 - "%"}'
2-CPU_LOAD=$(sar -P ALL 1 2 |grep 'Average.*all' |awk -F" " '{print 100.0 -$NF}')
我还尝试从 iostat 执行 100-idle
- 这在多 cpu/multi 核心系统上真的正确吗?
- 使用正常运行时间的 cpu 负载计算 cpu 总使用量是否正确?
使用代码我得到了单核的平均值,而我需要一个总 CPU 的结果,用在 % 问候, 谢谢
您最好完全在 awk 中实施该解决方案:
top -bn1 | awk -F, '/id/ { for (i=1;i<=NF;i++) { if ( $i ~ /[[:digit:]]{2}.[[:digit:]][[:blank:]]+id/ ) { split($i,arry," ");print arry[1]" - idle" }'
从 top 获取输出,然后检查是否有任何包含 id 的输出。如果满足条件,则取行中每个逗号分隔的数据,并针对 2 个数字进行模式匹配,一个小数,然后是一个或多个数字,一个空格,然后是 id。如果是这种情况,将基于空白space的变量拆分为数组并打印第一个元素。
您也可以查看 uptime
。
Uptime 一行显示以下信息。当前时间、系统已运行多长时间 运行、当前登录用户数以及过去 1、5 和 15 分钟的系统平均负载。
如果您想获得任何详细的统计数据,您也可以使用 perf
。
在此示例中,您可能会看到 1 秒内所有 CPU 个周期的数量:
-bash-4.1# perf stat -a sleep 1
Performance counter stats for 'system wide':
4002.822144 task-clock (msec) # 3.999 CPUs utilized (100.00%)
22809 context-switches # 0.006 M/sec (100.00%)
1332 cpu-migrations # 0.333 K/sec (100.00%)
23794 page-faults # 0.006 M/sec
5409531172 cycles # 1.351 GHz (100.00%)
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
3874289082 instructions # 0.72 insns per cycle (100.00%)
715152901 branches # 178.662 M/sec (100.00%)
20583742 branch-misses # 2.88% of all branches
1.001065623 seconds time elapsed