swap使用率达到100%的解决办法


一:方法
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

你可能感兴趣的:(linux,内存管理)