swap占用过高时 如何查看哪个经常占用了swap

最近这些天有一台服务器总是会收到剩余swap过低的告警 Lack of free swap space on。

故障PROBLEM,服务器:jiangjiaowebserver发生: Lack of free swap space on 10.4.5.7故障!
告警主机:jiangjiaowebserver 
告警时间:2019.03.30 19:11:40 
告警等级:Warning 
告警信息: Lack of free swap space on 10.4.5.7 
告警项目:system.swap.size[,pfree] 
问题详情:Free swap space in %:49.98 % 
当前状态:PROBLEM:49.98 % 
事件ID:334221

简单查看了一下服务器配置:

swap占用过高 Lack of free swap space on_swap空间不足

至于swap的监控,可以使用下面的脚本来做一些简单的分析,还算是比较实用的。

因为环境的swap使用很低,所以可以找一台服务器swap相对较高的,然后使用下面的脚本来分析

# vi s.sh 
for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' 
/proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10

或者直接使用命令执行:

for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' 
/proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10


执行s.sh此脚本如下:

# ./s.sh 
23414 476.664M
23465 439.812M
23447 439.699M
23418 437.953M
23416 390.125M
736 119.012M
30920 20.5859M
22662 9.99219M
22659 9.66406M
22661 9.65625M

输出的值第一列是pid,可以看到哪个进程占用较高的temp资源情况


查看应用进程是什么如图(如果不是自己服务可以看情况去关掉):

swap占用过高 Lack of free swap space on_swap占用过高时_02

上图片几个红色进程我查了一下资料可能是I2的灾备

sdatad.exe、rpcserver.exe、sdatalogd.exe、Srepd.exe、sdatabaklogd.exe、i2Availability.exe这些进程是否开启。进程描述如下:

服务名称所属模块说明
i2-Availability共用高可用功能模块
i2-rpc
工作机\灾备机与控制机RPC的通讯模块
i2-Sdatad工作机工作机与灾备机Srepd的通讯模块
i2-Slogd
工作机日志模块,并将日志送给控制机
i2-Srepd灾备机灾备机与工作机Sdatad的通讯模块
i2-Slogdbk
灾备机日志模块,并将日志送给控制机

查看灾备的I2服务

swap占用过高 Lack of free swap space on_swap空间不足_03

kill掉占用高的进程

# kill -9 23465
# kill -9 23416
# kill -9 23414
# kill -9 23418

在次查看swap空间已释放了

swap占用过高 Lack of free swap space on_Lack of free swap_04

zabbix监控也报告已恢复正常