告警知识库:内存使用率
2023-02-04 10:32:29
报警描述
业务[XX业务],虚拟机[X.X.X.X]内存使用率报警,使用率为95.00%
说明
对于Windows而言,如果内存占满,则系统会频繁的在物理内存与磁盘上的虚拟内存空间之间进行数据调入调出的操作,系统整体运行变慢。同时,用于磁盘读写的缓冲区会被压缩,磁盘读写持续变慢。
Linux的机制则与Windows有所不同,Linux会按照一定比例平衡物理内存与SWAP分区的使用,所以两者会按照比例同时增长。当Linux系统物理内存占满时,SWAP区也会飞速上涨,直到所有内存空间用尽。此时,Linux内部会对已有进程进行淘汰,按照OOM机制进行投票,选择优先级较高的进程杀死以释放内存。
监控对象
Windows操作系统、Linux操作系统、Unix操作系统
监控方式
Windows
对于Windows操作系统,通过监控代理读取。读取命令为:
sysmonitor.exe -counter mem
注意:该命令执行后,采集的是实时内存使用率。
实现机制:通过调取kernel32.dll的GlobalMemoryStatusEx函数实现。
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函数可获得更多的错误信息。
Linux
对于Linux操作系统,通过监控代理读取。读取命令为:
./sysmonitor.bin -counter mem
注意:该命令执行后,采集的是实时内存使用率。
实现机制:通过读取/proc/meminfo文件内容实现。
proc/meminfo输出示例如下:
复制MemTotal: 16213660 kBMemFree: 15033744 kBMemAvailable: 15509184 kBBuffers: 2104 kBCached: 662288 kBSwapCached: 0 kBActive: 570068 kBInactive: 296696 kBActive(anon): 197048 kBInactive(anon): 1808 kBActive(file): 373020 kBInactive(file): 294888 kBUnevictable: 0 kBMlocked: 0 kBSwapTotal: 0 kBSwapFree: 0 kBDirty: 380 kBWriteback: 0 kBAnonPages: 199044 kBMapped: 122620 kBShmem: 2008 kBKReclaimable: 120528 kBSlab: 193088 kBSReclaimable: 120528 kBSUnreclaim: 72560 kBKernelStack: 3568 kBPageTables: 8616 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 8106828 kBCommitted_AS: 565300 kBVmallocTotal: 34359738367 kBVmallocUsed: 0 kBVmallocChunk: 0 kBPercpu: 5120 kBHardwareCorrupted: 0 kBAnonHugePages: 92160 kBShmemHugePages: 0 kBShmemPmdMapped: 0 kBHugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kBHugetlb: 0 kBDirectMap4k: 190336 kBDirectMap2M: 7149568 kBDirectMap1G: 11534336 kB
UNIX
对于Unix操作系统:
AIX通过定时任务执行脚本读取。读取命令为:
svmon -G -O unit=KB
svmon是IBM AIX系统中常用的命令,用来捕获并分析虚拟内存快照。
规则
默认规则为:
[0<=使用率<90] 正常 [90<=使用率<95] 提醒 [95<=] 报警
可通过报警策略进行配置。