Linux系统清理内存

今天我的服务器突然变得很卡,通过free -m查看内存,发现只有不到100M的可用内存,而我在这台服务器上直运行了java应用程序,我的第一反应就是因为我不断关闭重启tomcat,但是进程却没有完全杀死,导致资源占用过多。
首先释放所有缓存echo 3 > /proc/sys/vm/drop_caches
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存
这样做之后我再通过free -m查看,发现情况并没有好转,而且整个操作还是响应很慢。其实我们在第一次free -m查看内存的时候也注意到了,大部分内存是被使用的状态,可用的内存和缓存使用的内存都少于100M,所以在释放缓存之后可用内存并没有太多增长。所以在大部分都内存都是被使用的状态下,我们只能是杀死占用的进程,查看程序状态是否异常了。
首先,我们列出占用内存最多的十个进程。命令是:ps -aux | sort -k4nr | head -n 10。
然后发现前几个都是java进程,占用的内存大小明显超过了正常运行需要的内存大小。这里我没有进一步去分析原因,因为服务器此时操作以及相当卡顿了,急需释放内存,而我服务器上的服务有事容易重启的,所以我直接将这些进程杀死。杀死后服务器马上就操作流畅了,一看可用内存,有1700多兆。重新启动服务后,也有1500兆可用内存。在接下来的内存监控中发现内存占用保持稳定,问题初步解决。至于为什么会出现这种状况,搜了一下,网上说catalina.out文件会因为运行时间很长,变得越来越大,写日志时占用内存过大,导致访问变慢。暂时理解是这个原因吧,如果问题重现了我再进行分析。

你可能感兴趣的:(Linux系统清理内存)