一:方法
1.增加物理内存的大小,减少swap使用的可能性;
2.杀掉使用swap最多的进程,这种方法比较low,不太建议了;
3.通过创建swapfile分区,来增加swap空间;
4.主动swapout:swapoff -a 执行结束后,再执行swapon -a。
二:具体操作
1.增加物理内存就无话可说了;
2.找到10个最大进程数量:
#!/bin/bash
ps ax -o pid,args | grep -v '^ PID'|sed -e 's,^ *,,' > /tmp/ps_ax.output
echo -n >/tmp/results
for swappid in $(grep -l Swap /proc/[1-9]*/smaps ); do
swapusage=0
for x in $( grep Swap $swappid 2>/dev/null |grep -v '\W0 kB'|awk '{print $2}' ); do
let swapusage+=$x
done
pid=$(echo $swappid| cut -d' ' -f3|cut -d'/' -f3)
if ( [ $swapusage -ne 0 ] ); then
echo -ne "$swapusage kb\t\t" >>/tmp/results
egrep "^$pid " /tmp/ps_ax.output |sed -e 's,^[0-9]* ,,' >>/tmp/results
fi
done
echo "top swap using processes which are still running:"
s
sort -nr /tmp/results | head -n 10
说明:1)此脚本会排序列出当前使用swap前10的进程;
2)无结果输出,表明当前没有使用swap的进程;
3)2.6.18-128.el5 (RHEL 5 update 3),此版本之前的系统不支持此功能;
4)top命令也可实现此功能,通过F,调出SWAP列;
5)此脚本只展示当前活跃进程的swap使用排行,所以还存在一种之前发生swapin行为的历史数据,此脚本无法监控,不过可以通过sar日志来查看;
3.增加swapfile
1)创建指定大小的swap空间
dd if=/dev/zero of=/swapfile bs=1024 count=65536
2)改变文件权限
chmod 600 /swapfile
3)设置swap文件
mkswap /swapfile
4)设置swapfile立刻临时生效
swapon /swapfile
5)编辑/etc/fstab,使启动生效
/swapfile swap swap defaults 0 0
6)可以通过free,cat /proc/swaps,free查看swap
4.主动释放swap(需要内存有足够空间)
# swapoff -a
# swapon -a