JSP/PrimeFaces Spring引导Tomcat内存泄漏问题

JSP/PrimeFaces Spring引导Tomcat内存泄漏问题,spring,jsp,jsf,tomcat,primefaces,Spring,Jsp,Jsf,Tomcat,Primefaces,我用 我在Tomcat Web应用程序管理器中使用Reload按钮,在重新加载我的应用程序(domain api)后,出现以下问题: Tomcat 8.0.26 jsf 2.2.12 primefaces 5.2 Spring Boot 1.2.6.RELEASE Spring 4.2.1.RELEASE 另外,通过JavaVisualVM,我可以看到在“重新加载”之后javax.faces.*对象的增长 这是采样器内存快照比较: 如何修复它?管理过类似的问题很久以前,通过在java选项中调

我用

我在
Tomcat Web应用程序管理器
中使用
Reload
按钮,在重新加载我的应用程序(
domain api
)后,出现以下问题:

Tomcat 8.0.26
jsf 2.2.12
primefaces 5.2
Spring Boot 1.2.6.RELEASE
Spring 4.2.1.RELEASE
另外,通过JavaVisualVM,我可以看到在“重新加载”之后
javax.faces.*
对象的增长

这是采样器内存快照比较:


如何修复它?

管理过类似的问题很久以前,通过在java选项中调试java垃圾收集器,它已经得到了解决:

JAVA_OPTS=“$JAVA_OPTS-XX:+cmsparallelremarkeabled-XX:ParallelGCThreads=8-XX:+useCmSinitiatingOccupancy-XX:cmSinitingOccupancyFraction=35-XX:+UseParNewGC-XX:+useComarkSweepGC-XX:-useAptiveSizePolicy-XX:SurviviorRatio=6”

其中:

-XX:+UseCmSinitiatingOccupancy避免对垃圾收集器功能使用启发式规则

-XX:CMS激活CMS(并发标记清除器)时的CMS激活位置

-XX:-UseAptiveSizePolicy禁用了调整内存生成的大小(通过此选项,我们可以设置参数-XX:SurvivorRatio=6)

-XX:SurvivorRatio=6建立伊甸园幸存者与1:6的关系,这将为年轻物体提供更多空间

为了优化垃圾收集器线程的性能,使用了以下参数:

-XX:+CMSParallelRemarkEnabled:减少CMS之间的暂停

-XX:ParallelGCThreads=8将垃圾收集的并行线程数设置为8(每个服务器处理器一个)

-XX:+UseParNewGC当您有多个处理器时,此收集器在多个线程中并行化,与原始集合不同

-XX:+UseConcMarkSweepGC它是一种并发收集器—一种垃圾收集算法,它尝试在后台执行大部分垃圾收集工作,而不在运行时停止应用程序线程


在我的例子中,有了这些选项,内存释放得更快。伊甸园和旧内存被更快地清理,优化了资源释放。

不幸的是,这没有帮助。仍然有相同的javax.faces.*内存泄漏JSP/PrimeFaces应该放在Tomcat共享库中,还是可以打包在应用程序war文件中?无论如何,我尝试了这两种变体。。同样的结果。
javax.faces.*
的数量正在增长。此外,在Tomcat内存泄漏消息中,我可以看到应用程序数量的增长-
以下web应用程序已停止(重新加载、取消部署),但它们以前运行的类仍加载到内存中,从而导致内存泄漏(使用探查器确认):/domain api/domain api
The following web applications were stopped (reloaded, undeployed), but their
classes from previous runs are still loaded in memory, thus causing a memory
leak (use a profiler to confirm):
/domain-api