一、找出那些进程占用swap内存
for i in `cd /proc;ls |grep "^[0-9]" |awk $0>100`;do awk '/Swap:/{a=a+$2}END{print '"$2"',a/1024"M"}' /proc/$i/smaps;done 2>&1 |sort -k2nr |head
二、linux什么时候开始使用交换分区Swap的?
我们知道虚拟内存(Swap)是为了满足物理内存不足的情况而提出的策略,是利用磁盘空间虚拟出的一块逻辑内存,作为物理内存的扩展。当linux系统中物理内存不足的时候,就会使用交换分区的虚拟内存。更详细的说,linux的内存管理采取的分页存取机制,为保证物理内存得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留在物理内存中,当需要使用到原始的内容时,这些信息又会被重新交换空间写入到物理内存中。
当然,在linux系统中也有对Swap分区的参数设置:
# cat /proc/sys/vm/swappiness
60
# sysctl -a |grep vm.swappiness
vm.swappiness=60
上面的60代表的是:当物理内存被使用(100-60)%的时候才会使用到swap,
vm.swappiness=0:表示最大限度使用物理内存,然后使用swap
vm.swappiness=100:表示积极的使用swap分区。
vm.swappiness=60:默认值
三、vm.swappiness 参数怎么修改?
临时修改:
# sysctl vm.swappiness=10
vm.swappiness=10
# cat /proc/sys/vm/swappiness
10
永久修改:
# sysctl vm.swappiness=10
vm.swappiness=10
# cat /proc/sys/vm/swappiness
10
# sysctl -p
或者
# vim /etc/sysctl.conf
增加或修改
vm.swappiness=10
# sysctl -p
四、如何释放swap?
swap分区一旦释放,存在在swap分区中的内容将会再次加载到物理内存中,释放内存方法通常如下:
方法一、利用第一点的操作找到对应使用SWAP分区的进程,进行重启。
方法二、当找不到具体的进程的时候,可以通过先关闭swap分区再开启释放。
注意:关闭分区前要确保系统空闲内存大于swap已经使用的内存,,否则有可能会导致宕机,后果比较严重。
1、查看当前分区挂载位置
swapon -s
2、关闭这个分区,
swapoff /dev/sda4(挂载点)
3、查看状态
swapon -s
4、确认swap是否关闭
free -m (最下边Swap对应全为0,表示已关闭)
5、重新开启swap
swapon /dev/sda4
6、查看是否挂载成功
swapon -s
7、查看swap是否释放
free -m
或者使用:swapoff -a;swapon -a
五、如何释放caches?
caches的关键配置文件是:/proc/sys/vm/drop_caches。记录了释放缓存的参数,默认为0,即不释放。其值可以有四种,分别代表不同的含义。
0 —— 不释放;
1 ——释放页缓存;
2——释放目录缓存(dentries)和inodes
3——释放所有缓存
一般使用如下方式清理:
sync;sync;sync;&& echo 1 > /proc/sys/vm/drop_caches
操作说明:
sync:将缓存写回到硬盘中
echo 1 > /proc/sys/vm/drop_caches 修改drop_caches的值为1,将释放页面缓存;
等待一会,保证上述命令执行完毕