- The Reason
今天web访问的RT值突然大于200ms,除了CPU略有偏高,发现swap竟然也开始使用了,对于一个最大使用堆空间只有6G的java程序有的server使用swap空间甚至达到4G,导致web响应性能不同程度的下降,于是不愿再使用swap.
- History
之前将 ”vm.overcommit_memory=1 “ 强制写入/etc/security/limits.conf文件,本想在程序请求分配内存时,永远假装还有足够的内存,不想彻底禁用swap的使用选择权,但是发现 cat /proc/sys/vm/overcommit_memory 并没有生效,效果也不是很好,不得不放弃这种妥协的办法。于是采取简单粗暴的办法。
- Action
提醒:当下面所有程序走完的时候,发现部分jboss起不来了,针对一向消耗内存的java进程,堆空间要求的最小空间已经超过剩余物理内存使用的最大空间,在资源有限的情况下,jboss自然是起不来了。针对此种情况:可以释放缓存,毕竟不是数据库,但是最终为了规避风险,还是放弃释放缓存,reboot了。。。所以如此做法要达到无痛的切换是不太可能的了。。。
1. 首先查看哪些进程占用swap较多,
执行语句: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;done| sort -k2nr | head
eg:
[root@****** ~]# 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;done| sort -k2nr | head
awk: cmd. line:1: fatal: cannot open file`/proc/17269/smaps' for reading (No such file or directory)
awk: cmd. line:1: fatal: cannot open file`/proc/17270/smaps' for reading (No such file or directory)
awk: cmd. line:1: fatal: cannot open file`/proc/17271/smaps' for reading (No such file or directory)
awk: cmd. line:1: fatal: cannot open file`/proc/17272/smaps' for reading (No such file or directory)
31341 2688.97M
2026 4.19922M
2220 0.863281M
2464 0.820312M
2457 0.792969M
2342 0.617188M
2540 0.578125M
2509 0.550781M
1719 0.53125M
75276 0.480469M
2.找出进程,杀掉占用最大的那个进程,对于我们的web环境,基本无疑问是jboss进程。。。
eg:
执行指令: ps axu|grep 31341
3.强行杀掉此进程后,关掉swap
执行指令: pkill -9 java;swapoff –a
4.再次查看swap,total为0,再没有使用了。。。
5.设置开机关闭swap
echo ‘swapoff -a’ >> /etc/rc.d/rc.sysinit
6.为确保万一,极力减少进程对swap的使用,设置最大限度降低swap的加载:
vm.swapness = 0
7.最后再启动jboss服务。。。。
总结:粗糙脚本执行如下:
~]# cat swapoff.sh
#!/bin/bash
#Describle close swap
#History 01/03/2017
#Author DYL
#Version 1.0
#杀掉jboss进程
pkill -9 java
#关掉swap
swapoff -a
#开机关闭swap
echo 'swapoff -a' >> /etc/rc.d/rc.sysinit
#最大限度降低swap的加载
grep "swapness" /etc/sysctl.conf
if [ $? -eq 0 ]
then
sed -i "s/vm.swap.*$/vm.swappiness = 0/g" /etc/sysctl.conf
else
echo "#Set least swap partion"
echo "vm.swappiness = 0" >> /etc/sysctl.conf
fi
#启动jboss服务
su jboss -c "sh /jboss/jboss/bin/jboss.sh "
###############The End####################
Author:网名为什么那么长
134

被折叠的 条评论
为什么被折叠?



