如何手动释放linux内存

在生产过程中,一些java模块会比较残忍的吃系统内存,然后如果这个模块写的比较挫,产生的垃圾就会比较多,如果linux系统的内存释放也不会及时,然后恶性循环,最后就把进程卡死,但是服务器是不可以down机的,所以这个时候就需要我们运维出来,手动的释放内存。

首先,我们登陆一台服务器,free -m看一下目前的情况:
paradin

然后cat /proc/sys/vm/drop_caches,会看到里面的值是0,0是不释放的意思。

sync,将系统缓存区中的脏数据写入磁盘中,包括已修改的i-node、已延迟的块I/O和读写映射文件。

echo 3 > /proc/sys/vm/drop_caches

为什么这里是3呢?这是因为echo 1的话代表“清理页面缓存”,echo 2的话代表“清理索引节点(inode)链接”,echo 3就是包括上面两者。

sysctl -p,这样不用重启服务器也可以生效。出现下面的一连串文字之后,再free -m看一下:
paradin

从112释放到2790,可见效果立竿见影。

上面整个过程的自动化脚本是这样的:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#Author:Chris Chan
#E-mail:chen_shuo@dahuatech.com
oldmemory=$(free -m|sed -n '2p'|awk '{printf $4}')
echo "开始的空余内存值:"$oldmemory
sync
echo 3 > /proc/sys/vm/drop_caches
sysctl -p
correctmemory=$(free -m|sed -n '2p'|awk '{printf $4}')
echo "释放完后的空余内存值:"$correctmemory

-------------This article is over!Thanks for reading!-------------
感谢您请我喝咖啡!(o´ω`o)
0%