我们有一个网络应用程序,它依赖于大约125个罐子,包括spring,hibernet,zk等。
当我们启动tomcat服务器时,它会将大约55K个类加载到permgen中。由于这个巨大的类加载,应用程序启动需要大量的时间。此外,应用程序所需的permgen空间非常高,因为在程序执行期间也会加载其他类。
我曾尝试使用-XX:+ CMSClassUnloadingEnabled -XX:+为CM指定的CMSPermGenSweepingEnabled选项。但是在一段时间后只卸载了42个班级。
非常感谢任何帮助或指示。
答案 0 :(得分:0)
罐子在类路径中是有原因的。它们可能是通过构建管理系统(maven,gradle,...)添加到webapp中的 - 因此可能存在对这些jar的依赖。
从类路径中删除jar将生成NoClassDefFoundError
。我想你必须忍受那些罐子,除非不需要其中一些(这不容易找到)。
最好检查您的依赖图(maven和gradle有它们),以查找项目中可能不需要或过时的jar文件。另外,请检查random-1.0.0.jar
和random-1.0.1.jar
等不同版本的广告罐,如果可能,请排除其中一个。
答案 1 :(得分:0)
您可能希望使用工具删除不需要的类。
这个问题涉及这个问题:
Tool to remove unnecessary dependencies in a Java project
但是关于Oracle的这个问题可能更有用:
https://forums.oracle.com/forums/thread.jspa?threadID=1311910
我认为GenJar2(http://code.google.com/p/genjar2/)可能最能满足您的需求。