题目要求:使用shell脚本监控检查系统某进程内存使用量
分析:
在对应用服务进行维护时,也经常遇到由于内存使用过大导致进程崩溃,造成业务中断的情况。例如:32 位程序可寻址的最大内存空间为 4G,如果超出将申请内存失败,同时物理内存也是有限的。内存使用过高可能由于内存泄露,消息堆积等情况。通过脚本对业务进程内存使用量进行时时监控,可以在内存使用量异常时及时发送告警,便于维护人员及时处理。
我们可以通过指定进程pid获得此进程内存使用量,如果此进程内存使用量超过 1.6G(可以根据实际情况进行调整),则输出告警,否则输出正常信息。
解答:
命令行测试:
[root@myhost~]# ps -ef | egrep tomcat | egrep root | egrep -v "grep|vi|tail" | sed -n 1p | awk '{print $2}'
18430
[root@myhost~]# ps -p 18430 -o vsz
VSZ
14896208
[root@myhost~]# ps -p 18430 -o vsz | egrep -v VSZ
14896208
脚本:
#!/bin/sh
source /etc/profile
#define variable
psUser=$1
psProcess=$2
pid= `ps -ef | egrep ${psProcess} | egrep ${psUser} | egrep -v "grep|vi|tail" | sed -n 1p | awk '{print $2}'`
echo ${pid}
if [ -z ${pid} ];then
echo "The process does not exist."
exit 1
fi
MemUsage=`ps -p ${pid} -o vsz |egrep -v VSZ`
(( ${MemUsage} /= 1000))
echo ${MemUsage}
if [ ${MemUsage} -ge 1600 ];
then
echo “The usage of memory is larger than 1.6G”
else
echo “The usage of memory is ok”
fi
情景拓展:Centos内存占满或使用率过高处理方法
概述:
经常会遇到CentOS用着用着变慢了,free -m查看内存使用情况,发现内存跑满了或过高
[root@myhost ~]# free -m
total used free shared buffers cached
Mem: 16081 882 15198 0 122 510
-/+ buffers/cache: 249 15831
Swap: 0 0 0
分析:
输入top,再按shift+m,按内存占用百分比排序,发现应用也没占多少内存,那是什麽占用的呢?其实是CentOS为了提高效率,把部分使用过的文件缓存到了内存里。这样的话如果不需要这样的文件性能,可以直接释放来缓解内存压力。
[root@myhost ~]# top
top - 14:54:15 up 2 days, 19:22, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16467076k total, 904060k used, 15563016k free, 125576k buffers
Swap: 0k total, 0k used, 0k free, 522472k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2568 grafana 20 0 1142m 55m 15m S 0.0 0.3 1:05.35 grafana-server
785 root 20 0 1392m 30m 7604 S 0.3 0.2 9:25.89 CmsGoAgent.linu
1249 root 10 -10 120m 11m 9180 S 0.0 0.1 7:30.05 AliYunDun
1557 root 20 0 81756 4844 2236 S 0.0 0.0 0:28.22 aliyun-service
1242 root 20 0 31960 4456 2808 S 0.0 0.0 0:49.32 AliYunDunUpdate
4751 root 20 0 100m 4452 3432 S 0.0 0.0 0:00.02 sshd
1542 postfix 20 0 81204 3516 2628 S 0.0 0.0 0:00.11 qmgr
.
.
.
.
解决:
[root@myhost ~]# sync
[root@myhost ~]# echo 3 > /proc/sys/vm/drop_caches
[root@myhost ~]# free -m
total used free shared buffers cached
Mem: 16081 265 15816 0 1 40
-/+ buffers/cache: 223 15857
Swap: 0 0 0