java - 如何在旧版 Java 应用程序上使用 com.opensymphony.oscache 查找内存泄漏

标签 java memory-leaks opensymphony

我有一个旧的 Java 应用程序,每周有几次变得非常慢,我必须重新启动 Tomcat。

我检查了 New Relic 的热门事务和错误日志,但找不到问题的根源,看来热门事务更多的是结果而不是问题的根源。

所以,我认为这可能是内存泄漏,我进行了堆转储并尝试在 Eclipse 内存分析器上对其进行分析,但我在识别内存泄漏以及是否确实是内存泄漏方面遇到了困难。

看来问题1是com.opensymphony.oscache.web.ServletCache。

以下是内存分析器的一些结果:

Summary

Histogram

Problem Suspect 1

此外,这是 VisualVM 监视器:

VisualVM Monitor

谢谢! 任何有关这方面的帮助或指导都会非常有帮助!

这是oscache.properties文件:

cache.memory=true
cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.HashDiskPersistenceListener
cache.path=/home/oscache/tb

最佳答案

我建议采取一些措施来解决这个问题。

如果您的用例允许您执行以下操作,请使用磁盘缓存而不是内存缓存:

在oscache的配置文件中

cache.memory=false
cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
cache.path=/opt/myapp/cache
cache.capacity=1000

如果不建议使用磁盘缓存尝试减少缓存容量

cache.capacity=1000

如果可能,请提供 oscache 的配置详细信息,以便更好地审查。

更新

当属性 cahce.memory=false 时使用 HashDiskPersistenceListener

我们有两种选择可供尝试

1) 提供缓存容量的值

cache.capacity=1000 #or a value that covers the usecase

2)使缓存使用磁盘持久化

cache.memory=false

关于java - 如何在旧版 Java 应用程序上使用 com.opensymphony.oscache 查找内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908953/

相关文章:

javascript - 仅在 IE9 标准模式下的 asp.net javascript 内存泄漏

java - 追踪方法的调用者[通过调用调用]

java - 无法理解这个 Java Stream+Generics 示例

Python 内存占用与堆大小

delphi - FastMM 报告 FormDestroy 上释放的类存在内存泄漏

java - OSCache 正在开发中还是已经停产?

java - cronTrigger 的配置(使用 opensymphony quartz )

java - 数据库访问和电池友好的应用程序

java.lang.ClassCastException : casting an object, 给他的 parent

java - 如何从 Scala 中的辅助构造函数访问字段?