1、Tomcat内存溢出,直接崩溃 定位:查看崩溃日志,线程数正常;然后因为tomcat已经崩溃了无法查询其他相关信息,第一次简单粗暴解决;直接将内存从900+M调整为2G(我们设备内存4G),然后重启tomcat;重启后持续观察内存是否增长,查看内存回收情况、查看内存分配情况、dump内存文件进行分析,后来发现老生代持续增长且回收时消耗了很长时间只回收很少的内存;分析dump文件发现时有些静态的map持续增长没有清空导致的。 2、线程数过多导致内存溢出后无法创建新的线程从而程序崩溃 怀疑原因:(1)线程执行过慢,导致最后阻塞过多;(2)在高峰期时,内存不够创建这么多线程(我们设备内存4G,后来调整成了2G;导致线程从最开始可以创建5000+后达到顶峰崩溃到只能创建2000+就崩溃了,具体开始为什么从1G调整成2G参考问题1),发现这个内存分配总是有利有弊的,需要长时间验证给出合理的分配才行,因为问题1已经解决,考虑到2G内存太大后来还是调整成了默认值;然后重启tomcat,实时观察线程数文件,看是否有阻塞问题,后来发现XStream将xml转对象时在进行new()操作时非常耗时从而导致阻塞。
新闻热点
疑难解答