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

标签 java jakarta-ee tomcat7 out-of-memory war

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

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

现在我找到了this stack overflow Question , 那可以适用于我的情况吗?如果是这样,tomcat 服务器中的公共(public)文件夹是哪些?以前有人这样做过,或者有其他更有效但不那么复杂的方法吗?

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

我的

最佳答案

I deploy these war files. the webApp is about 35MB in size ( it has a lot of jars and such)

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

but when I deploy it to my tomcat webserver, I can see it takes about 300MB of RAM, is this normal?

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

If I have 1 GB of ram I want to be able to fit more apps into my webserver without getting any OOM Errors.

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

关于java - 如何让war文件占用更少的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162654/

相关文章:

java - 无法生成范围报告

java - tomcat7不会在启动时运行

java - 将 'password expiration' 信息从 Wildfly 服务器身份验证模块传递到远程 EJB 客户端

java - Tomcat 在一定数量的请求后拒绝连接

mysql - Spring管理的数据源中的connection.createStatement永远不会返回

java - 使用相同密码实例的 BadPadding 异常

Javaw.exe 应用程序未打开,WIndows 10 Pro Surface Pro 4

java - 嵌入式 H2 数据库连接错误 - 用户名和密码错误

java - 为什么要使用@PostConstruct?

linux - linux 上的 tomcat7 调优 : how to know what should be changed?