一 报警:
收到告警信息。
二 查看:
1 free命令
total used free shared buffers cached
Mem: 32880592 32620984 259608 0 210940 1300628
-/+ buffers/cache: 31109416 1771176
Swap: 0 0 0
一共输出4行:第一行就是title。重点看第二三行。
第二行:
total1:
used1:
free1: 空闲的内存
shared1:当前已经废弃不用。
buffers1: 系统分配但未被使用的buffers 数量。
cached1:
有个公式:total = used+free
32880592 = 32620984 + 259608
第三行:
(-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached
32620984 -210940-1300628 = 31109416
这是真实的内存消耗数据。
(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached
259608 + 210940 + 1300628 = 1771176
这是可挪用的内存数,
是系统当前实际可用内存
第四行:
是指交换分区
备注:buffer与cache的区别:两者都是RAM中的数据。
buffer是用于存放要输出到disk(块设备)的数据的,
cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
关于swap数据:
free命令的所有输出值都是从/proc/meminfo中读出的。
当内存可用数据不够时,会用部分磁盘空间交换。通常内不能足够的清空下这个数据是0.
当出现时值得关注,数据量小时不太影响性能,大了会影响性能。这也是内存告警的意义。
因为已经处理完毕,截图的数据不能还原现场。
三解决
top
top命令是比较常见的。功能强大,其实内存信息也可以在这里看,截图的上半部分就有。不过不如free命令简介直观。
top除了内除外,还会关注CPU信息。后面的文章会详细整理处理CPU100%的告警。
这里我们主要是看下面内存消耗情况:
也就是res那一列。
假设内存16G,部署了7个服务,每个启动脚本分配了2G。就用去了14G。这时候,再有个通用的日志收集模块之类占用内存。内存就占用就比较高了,负载高的时候,空闲内存低于1G就会监控报警。
这里top找到进程主要是跟ps -aux|grep 'java' 结合使用。
其实就是在不迁移服务的情况下,对比下启动脚本里分配的内存大小,跟实际消耗的内存对比下,
举个例子,价格分配了4G,实际只消耗了几百M。那就要调整下启动脚本,调整大小,释放出内存。
***************************************************
熟能生巧,无他