最近升级了struts版本为2.5.6,然后项目频繁出现内存溢出。用MAT工具分析了堆栈文件,发现org.apache.tomcat.util.threads.TaskThread 有多个,并且每个占用内存都很大。不知怎么分析,从何分析起?哪位大佬有经验的可否告知一二,万分感谢。
更正一下,是2.5.26.
你这没有给出相关的线程类源码,也没有错误日志,别人很难解答你的问题的。
你可以好好检查下是否在线程中循环等操作往Map集合对象中放入了大量数据没有释放?
如果在线程中使用了Map类尽可能避免使用HashMap,而要使用CurrentHashMap,
一来HashMap线程不安全,CurrentHashMap线程安全,二来HashMap 能存放的数据上限没有CurrentHashMap存放的数据多。
如果你的代码在多线程中使用了ArrayList 类,或new 出了很多对象,使用完成后最好做个置空操作,这样能暗示JVM去垃圾回收。
否则线程每执行一次,都创建对象,你的线程频率又很快,那么内存很容易不够用,出现溢出。
最后,不用花心思看org.apache.tomcat.util.threads.TaskThread这个类了,基本上能断定应该是你自己写的线程类里面代码逻辑有问题。