【发布时间】:2012-08-28 15:31:38
【问题描述】:
我需要有关如何减少我的网络应用程序的内存使用量的帮助。这样我就可以更适合我的网络服务器了。
所以我正在构建一个带有 JSF 2.0 的 Java Web 应用程序,该应用程序在 Eclipse helios 中开发并在 Apache tomcat 服务器上运行。我还有一个带有 tomcat 的专用虚拟服务器,我在其中部署这些战争文件。 webApp 的大小约为 35MB(它有很多 jar 等)但是当我将它部署到我的 tomcat 网络服务器时,我可以看到它需要大约 300MB 的 RAM,这正常吗?我的专用服务器只有 2GB 的内存,通常有 1 个可以使用。所以我一部署 3 个应用程序就会收到 OOM 错误,我已经收到 permgen OOM 和 out of swamp Memory 错误;为了解决这个问题,我将我的 MaxPermGen 提高到大约一个 gig 并重新启动服务器以取回一些沼泽空间。所以我尝试部署较小的旧应用程序(大约 15MB),它们占用的内存要少得多。如果我有 1 GB 的内存,我希望能够将更多应用程序放入我的网络服务器中,而不会出现任何 OOM 错误。
现在我找到了this stack overflow Question,这可以应用于我的情况吗?如果是这样,tomcat服务器中的常用文件夹是什么?以前有人这样做过,还是有其他更有效、不那么复杂的方法?
任何想法和/或评论都非常感谢。谢谢!
我的
【问题讨论】:
-
您是否使用任何 JVM 参数来调整堆大小?除非您对静态数据、字符串文字和类元数据的使用率很高,否则您不需要 1gb 的 maxpermgen。
-
这些是我使用的JVM参数 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:PermSize=256m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError
-
尝试用 -Xmx1024m 替换 -XX:MaxPermSize=1024m
标签: java jakarta-ee tomcat7 out-of-memory war