报警知识库


内存使用率

<h1>报警描述</h1> <p>业务[XX业务],虚拟机[X.X.X.X]内存使用率报警,使用率为95.00%</p> <h1>说明</h1> <p>对于Windows而言,如果内存占满,则系统会频繁的在物理内存与磁盘上的虚拟内存空间之间进行数据调入调出的操作,系统整体运行变慢。同时,用于磁盘读写的缓冲区会被压缩,磁盘读写持续变慢。 Linux的机制则与Windows有所不同,Linux会按照一定比例平衡物理内存与SWAP分区的使用,所以两者会按照比例同时增长。当Linux系统物理内存占满时,SWAP区也会飞速上涨,直到所有内存空间用尽。此时,Linux内部会对已有进程进行淘汰,按照OOM机制进行投票,选择优先级较高的进程杀死以释放内存。</p> <h1>监控对象</h1> <p>Windows操作系统、Linux操作系统、Unix操作系统</p> <h1>监控方式</h1> <h2>Windows</h2> <p>对于Windows操作系统,通过监控代理读取。读取命令为:</p> <pre><code>sysmonitor.exe -counter mem</code></pre> <p><strong>注意:该命令执行后,采集的是实时内存使用率。</strong> 实现机制:通过调取kernel32.dll的GlobalMemoryStatusEx函数实现。</p> <pre><code>GlobalMemoryStatusEx函数 BOOL WINAPI GlobalMemoryStatusEx( _Inout_ LPMEMORYSTATUSEX lpBuffer ); 该命令的参数 lpBuffer 是一个结构体,其结构定义为: typedef struct _MEMORYSTATUSEX { DWORD dwLength; // 结构的长度,在使用函数前必须初始化此值 DWORD dwMemoryLoad;// 物理内存的使用率(0~100的整数) DWORDLONG ullTotalPhys;// 物理内存的总量,以字节为单位(以下均相同) DWORDLONG ullAvailPhys;// 物理内存的剩余量 DWORDLONG ullTotalPageFile;// 系统页面文件大小 DWORDLONG ullAvailPageFile;// 系统可用页面文件大小 DWORDLONG ullTotalVirtual;// 虚拟内存的总量 DWORDLONG ullAvailVirtual;// 虚拟内存的剩余量 DWORDLONG ullAvailExtendedVirtual;// 保留,值为0 } MEMORYSTATUSEX,*LPMEMORYSTATUSEX; 返回值 如果函数成功,返回值为true。 如果函数失败,返回值为false。 调用GetLastError函数可获得更多的错误信息。</code></pre> <h2>Linux</h2> <p>对于Linux操作系统,通过监控代理读取。读取命令为:</p> <pre><code>./sysmonitor.bin -counter mem</code></pre> <p><strong>注意:该命令执行后,采集的是实时内存使用率。</strong> 实现机制:通过读取/proc/meminfo文件内容实现。</p> <p>proc/meminfo输出示例如下:</p> <pre><code>MemTotal: 16213660 kB MemFree: 15033744 kB MemAvailable: 15509184 kB Buffers: 2104 kB Cached: 662288 kB SwapCached: 0 kB Active: 570068 kB Inactive: 296696 kB Active(anon): 197048 kB Inactive(anon): 1808 kB Active(file): 373020 kB Inactive(file): 294888 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 380 kB Writeback: 0 kB AnonPages: 199044 kB Mapped: 122620 kB Shmem: 2008 kB KReclaimable: 120528 kB Slab: 193088 kB SReclaimable: 120528 kB SUnreclaim: 72560 kB KernelStack: 3568 kB PageTables: 8616 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 8106828 kB Committed_AS: 565300 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB Percpu: 5120 kB HardwareCorrupted: 0 kB AnonHugePages: 92160 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 190336 kB DirectMap2M: 7149568 kB DirectMap1G: 11534336 kB </code></pre> <h2>UNIX</h2> <p>对于Unix操作系统: AIX通过定时任务执行脚本读取。读取命令为:</p> <pre><code>svmon -G -O unit=KB</code></pre> <p>svmon是IBM AIX系统中常用的命令,用来捕获并分析虚拟内存快照。</p> <h1>规则</h1> <p>默认规则为:</p> <pre><code>[0&lt;=使用率&lt;90] 正常 [90&lt;=使用率&lt;95] 提醒 [95&lt;=] 报警</code></pre> <p>可通过报警策略进行配置。</p>

页面列表

ITEM_HTML