解决思路:
1.首先看java日志文件,有没有报错(ooM)。(没有,考虑内存泄漏)
2.通过dump目录,生成los.hprof文件,使用jvisualvm.exe工具查看,是否有大量类存在。(有,找到代码位置,解决掉;没有,下一步)
3.确认xms,xmx等参数已设置,确保Java内存不增长,排除java项目的影响。
4.通过top free 两个命令,进行中午,晚上两次观察,确认是哪个项目或free中哪个参数涨的快。
第一次观察:
第2次观察:
第3次观察:
5.确认了消耗的内存是free中shared占用的。
6.确认shared的意思:
shared的内存主要使用来给tmpfs使用。
有时候,当应用程序使用到Tmpfs时,而在部署的时候如果没有对应用程序占用的内存做足够的评估时,就有可能把Tmpfs用满,这个时候就需要调整Tmpfs的大小了,当然,调整的大小不能大于你机器内存大小,否则,你只能换机器了,又或是优化你的应用程序。
7.df -h
查看当前目录下一级子文件和子目录占用的磁盘容量:
(可以确认tmpfs的临时文件在哪个目录下)
8.既然是临时文件,定时清理/tmp中的文件即可。
CentOS 7 系统有一个默认定时器会每隔 1 天执行一次临时目录清理操作,把 /tmp 目录下所有超过 10 天没有任何变动的子目录全部删除。
(由于业务产生的临时文件太多,10天清理一次,内存没那么多,因此,需要修改清理配置,改成清理两天前的没有任何变动的子目录全部删除)
1.先确认是否是centos7版本,
2.找的这个文件
/usr/lib/tmpfiles.d/tmp.conf
3.修改配置文件/usr/lib/tmpfiles.d/tmp.conf
v /tmp 1777 root root 10d # 清理/tmp下10天前的目录和文件 将10改成 2 # 清理/tmp下2天前的目录和文件