记一次springboot项目的内存优化

公司的一个项目使用了两台服务,一台做业务服务器,一台数据服务器,两台服务器都是16G内存;项目使用的是dubbo做微服务,拆分的服务多了,运行的jar就越来越多,以致16G的内存不够用了,可用内存剩下300多M;所以最近出现一些服务某明奇妙就挂了的现象;

创业公司肯定是想节约成本,既不想扩大业务服务器内存,又不想再购买新的服务器;那么,那么只能从压榨jar进程的内存来空出内存;结果发现,这个方案是靠谱,因为很多jar进程根本就没有用到那么多的内存,所以,可以在启动进程的时候就指定内存的大小;但是,问题来了,要指定多大的内存大小呢?

首先通过jps列出所有的jar进程,

然后选了一个其中的某个进程ID,查看他的堆内存使用大小,通过

jmap -heap pid

打印出每一个jar进程使用到的内存大小;

第一张图是指定了最大内存为500M,第二张图是没有指定最大内存的,结果默认是给了接近4000M的内存大小;

观察第二章图,真正使用的内存大小为eden+s1+s2+old = 355+10+18约等于400M,所以我们大概分配600M左右的内存大小就行了;在我们启动jar程序的时候,就指定最大的内存大小-Xmx128m;

通过上面的方法,把几个jar进程的内存进行压缩,最后,将剩余未300多M,空出了大概4G左右

不过呢,总感觉gc的次数肯定上升了,不过没办法了,鱼和熊掌的问题;

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注