我有一个旧的遗留Java应用程序,每周有几次非常慢,我必须重新启动Tomcat。
我检查了New和错误日志,但是我找不到问题的根源,似乎顶级事务更多的是一个结果,而不是问题的根源。
因此,我想这可能是内存泄漏,我做了堆转储,并试图在Eclipse内存分析器上分析它,但是我在识别内存泄漏和是否真的是内存泄漏方面遇到了困难。
它接缝的问题嫌疑人1是com.opensymphony.oscache.web.ServletCache。
以下是内存分析器的一些结果:



另外,这是VisualVM监视器:

谢谢!任何帮助或指导这将是非常有帮助的!
这是oscache.properties文件:
cache.memory=true
cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.HashDiskPersistenceListener
cache.path=/home/oscache/tb发布于 2017-03-28 12:50:43
我建议解决这个问题的几件事都没有。
如果用例允许您使用磁盘缓存而不是内存缓存,则可以:
的配置文件中
cache.memory=false
cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
cache.path=/opt/myapp/cache
cache.capacity=1000如果不建议使用磁盘缓存,请尝试减少缓存容量。
cache.capacity=1000请提供示波器的配置细节,以便在可能的情况下进行更好的审查。
更新
属性HashDiskPersistenceListener时使用cahce.memory=false。
我们有两种选择
1)提供缓存容量的值。
cache.capacity=1000 #or a value that covers the usecase2)使高速缓存使用磁盘的持久性。
cache.memory=false发布于 2017-03-29 09:09:54
我建议使用试用版的YourKit Java,它将为您提供更多关于遗留应用程序代码的详细信息。下面是链接:早在2014年,我就用这个工具作为一个试用版来检测基于struts 2和Hibernate的Web应用程序中的内存泄漏。
https://stackoverflow.com/questions/42908953
复制相似问题