如何让war文件占用更少的内存

Myy*_*Myy 3 java war out-of-memory tomcat7 jakarta-ee

我需要有关如何减少网络应用程序内存使用量的帮助。这样我就可以将更多内容放入我的网络服务器中。

所以我正在使用 JSF 2.0 构建一个 java web 应用程序,在 eclipse helios 中开发并在 Apache tomcat 服务器上运行。我还有一个带有 Tomcat 的专用虚拟服务器,我在其中部署这些战争文件。webApp 的大小约为 35MB(它有很多 jar 等),但是当我将它部署到我的 tomcat Web 服务器时,我可以看到它需要大约 300MB 的 RAM,这正常吗?我的专用服务器只有 2GB 内存,通常只有 1 可用。因此,我一部署 3 个应用程序,就会收到 OOM 错误、permgen OOM 和 out of swamp Memory 错误;为了解决这个问题,我将 MaxPermGen 提高到大约一个演出并重新启动服务器以收回一些沼泽空间。所以我尝试部署较小的旧应用程序(大约 15MB),它们占用的内存更少。如果我有 1 GB 的 RAM,我希望能够将更多应用程序安装到我的网络服务器中,而不会出现任何 OOM 错误。

现在我发现了这个堆栈溢出问题,这可以应用于我的情况吗?如果是的话,tomcat服务器中的常用文件夹有哪些?有人以前做过这个,或者有不同的更有效、不那么复杂的方法吗?

任何想法和/或评论都非常感激。谢谢!

米伊

Pet*_*rey 5

我部署这些战争文件。webApp 大小约为 35MB(它有很多 jar 等)

只有您使用的文件才会占用内存。删除不使用的类会节省磁盘空间,但不会节省内存。

但是当我将它部署到我的 tomcat Web 服务器时,我可以看到它需要大约 300MB 的 RAM,这正常吗?

如果您的服务器中有 300 Mb 可用空间,它将全部使用。如果您有 3 GB 可用空间,它也可能会使用所有这些空间。您需要在实际使用服务器并执行 Full GC 后查看使用了多少。

如果我有 1 GB 的 RAM,我希望能够将更多应用程序安装到我的网络服务器中,而不会出现任何 OOM 错误。

您需要确定每个应用程序真正需要多少内存。或者您需要购买更多内存,因为 1 GB 的成本约为 20 美元。(我认为它是一个托管解决方案,内存成本更高;)