服务器 swap分区使用率高的原因分析及增加swap空间
前述:正常情况下swap分区使用率都很低或者几乎为0。如果出现占用率很高的情况,最快捷的解决办法就是查找到相关的进程id并重启相关进程。
#查看占用swap分区进程id
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
[root@localhost ~]# 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 5879 4685.23M 2143 10.4062M 5531 8.57031M 2349 3.82031M 2392 3.74609M 4580 3.63281M 2504 3.15625M 2491 2.76562M 4324 2.67969M 2565 2.61719M
可发现PID为5879的进程占用了4个多G,通过top命令发现此PID对应的是oracle下nmccollector。
[root@localhost ~]# top
top - 09:25:12 up 15 days, 16:01, 1 user, load average: 0.08, 0.07, 0.08
Tasks: 224 total, 1 running, 223 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7%us, 0.4%sy, 0.0%ni, 98.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7967824k total, 7810600k used, 157224k free, 416484k buffers
Swap: 12287992k total, 5077816k used, 7210176k free, 809840k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5879 ORACLE 20 0 11.5g 5.8g 15m S 1.3 76.4 81:53.50 nmccollector
经查询资料发现nmccollector是OEM控制监测方面的,在EM下重启此服务即可回收swap空间。打开EM,在首页下方点击“在内存中访问模式下监视”,然后禁用内存访问模式,这样你的nmccollector.exe进程应该就会没有,你再回到EM,开启SQL访问模式!
增加swap空間:
1.添加swap分区
使用dd命令创建/home/swap这么一个分区文件。文件的大小是2048000 个block,一般情况下1个block为1K,所以这里空间是2G。
dd if=/dev/zero of=/var/swapfile bs=1024 count=2048000 //添加交换文件并设置其大小为2G
2.执行完毕,对交换文件格式化并转换为swap分区:
mkswap /var/swapfile
3.挂载并激活分区:
swapon /var/swapfile
4 赋权限
chmod -R 0600 /var/swapfile
现在再用free -m命令查看一下内存和swap分区大小,就发现增加了2G的空间了。
注意当计算机重启了以后,发现swap还是原来那么大,新的swap没有自动启动,还要手动启动。那我们需要修改/etc/fstab文件
5.设置开机自动挂载该分区:
vi /etc/fstab
在fstab文件末尾追加如下内容后:wq!保存即可:
/var/swapfile swap swap defaults 0 0