CPU使用率
<h1>报警描述</h1>
<p>业务[XX业务],虚拟机[X.X.X.X],位于[位置]CPU使用率报警,使用率为95%。</p>
<h1>说明</h1>
<p>如果CPU使用率达到100%,则所有与CPU有关的计算操作都会产生阻塞现象,系统卡顿。
当CPU使用率较高时,应当进一步分析操作系统的进程信息,定位哪些进程占用了CPU资源。对于非关键进程,可采取终止相关进程的操作以释放资源;对于关键进程,一方面要对进程的运行效能进行优化(修改配置参数、优化程序代码),另一方面也可以向该服务器追加CPU计算资源。</p>
<h1>监控对象</h1>
<p>Windows操作系统、Linux操作系统、Unix操作系统</p>
<h1>监控方式</h1>
<h2>Windows</h2>
<p>对于Windows操作系统,通过监控代理读取。读取命令为:</p>
<pre><code>sysmonitor.exe -counter cpu</code></pre>
<p><strong>注意:该命令执行后,采集的是最近5秒钟CPU平均使用率。</strong>
实现机制:通过调取kernel32.dll的GetSystemTimes函数实现。</p>
<pre><code>GetSystemTimes函数
BOOL WINAPI GetSystemTimes(
__out_opt LPFILETIME lpIdleTime, // 空闲时间
__out_opt LPFILETIME lpKernelTime, // 内核进程占用时间
__out_opt LPFILETIME lpUserTime // 用户进程占用时间
);
GetSystemTimes获得系统(自开机以来)处于Kernel状态下面的CPU时间,以及系统处于User状态下的时间,以及Idle的时间.
返回值
如果函数成功,返回值为true。
如果函数失败,返回值为false。
调用GetLastError函数可获得更多的错误信息。</code></pre>
<h2>Linux</h2>
<p>对于Linux操作系统,通过监控代理读取。读取命令为:</p>
<pre><code>./sysmonitor.bin -counter cpu</code></pre>
<p><strong>注意:该命令执行后,采集的是最近5秒钟CPU平均使用率。</strong>
实现机制:通过读取/proc/stat文件内容实现。</p>
<p>proc/stat输出示例如下:</p>
<pre><code>cpu 284406 5124 265469 127366482 1535 137210 17435 0 0 0
cpu0 95163 762 58533 31818184 273 28239 2822 0 0 0
cpu1 56060 1575 63527 31872003 354 33676 2686 0 0 0
cpu2 80310 1909 78641 31816154 328 41024 8639 0 0 0
cpu3 52872 877 64766 31860140 579 34270 3286 0 0 0
intr 549507255 0 9 0 0 414 0 0 0 0 0 0 31 15 0 0 0 0 0 0 0 0 0 0 0 0 16 0 241447 230309 284184 238755 0 104037 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 1059578036
btime 1637232875
processes 278082
procs_running 1
procs_blocked 0
softirq 71843425 0 17031560 3 1055041 103904 0 2167 27299326 3 26351421</code></pre>
<h2>UNIX</h2>
<p>对于Unix操作系统:
AIX通过定时任务执行脚本读取。读取命令为:</p>
<pre><code>sar -u 1 5</code></pre>
<p>sar命令是sysstat工具包中的一个命令行工具,用于打印CPU、内存等资源信息。该工具支持Linux、Unix操作系统。由于大多数已知AIX上均安装了sysstat包,因此这里采用sar命令读取CPU使用率。</p>
<p>"sar -u 1 5"这条命令的含义就是,每隔1秒钟打印一次CPU资源信息,打印5次。其输出示例如下:</p>
<pre><code>Linux 4.18.0-240.22.1.el8_3.x86_64 (zgyw) 11/22/2021 _x86_64_ (4 CPU)
02:13:47 PM CPU %user %nice %system %iowait %steal %idle
02:13:48 PM all 0.25 0.00 0.50 0.00 0.00 99.25
02:13:49 PM all 0.00 0.00 0.00 0.00 0.00 100.00
02:13:50 PM all 0.00 0.00 0.50 0.00 0.00 99.50
02:13:51 PM all 0.00 0.00 0.00 0.00 0.00 100.00
02:13:52 PM all 0.00 0.00 0.75 0.00 0.00 99.25
Average: all 0.05 0.00 0.35 0.00 0.00 99.60</code></pre>
<h1>规则</h1>
<p>默认规则为:</p>
<pre><code>[0<=使用率<90] 正常
[90<=使用率<95] 提醒
[95<=] 报警</code></pre>
<p>可通过报警策略进行配置。</p>