gpt4 book ai didi

java - JVM 在服务器中使用了太多内存

转载 作者:行者123 更新时间:2023-11-28 23:39:34 26 4
gpt4 key购买 nike

我有一个 Web 应用程序,用于记录来自各种门户的数据。这是一个使用 mongo db 作为数据库服务器的 java 应用程序。我的应用程序足够快,但我面临的问题是 Tomcat 在每个应用程序服务器上占用了过多的 Ram 内存。我必须每两个小时重新启动 tomcat 以释放此内存,否则它会变得无响应。我运行 netstat -n | wc -l 在每台服务器上,平均输出在每台服务器上为 1000。我在我的 servlet 和 mongo dao 中引入了 System.gc 以强制 GC 释放内存,但它增加了 CPU 使用率到 100%。您能否建议如何解决此内存问题。

最佳答案

我使用以下方法来查找 Java 中的内存泄漏。我使用 jProfiler 取得了巨大成功,但我相信任何具有图形功能的专用工具(差异更容易以图形形式分析)都可以使用。

启动应用程序并等待它进入“稳定”状态,此时所有初始化已完成并且应用程序处于空闲状态。多次运行怀疑会产生内存泄漏的操作,以允许进行任何缓存、数据库相关的初始化。运行 GC 并获取内存快照。再次运行该操作。根据操作的复杂性和所处理数据的大小,操作可能需要运行多次到多次。运行 GC 并获取内存快照。对 2 个快照运行 diff 并进行分析。基本上分析应该从最大的积极差异开始,例如,对象类型,并找出导致这些额外对象留在内存中的原因。

对于在多个线程中处理请求的 Web 应用程序,分析变得更加复杂,但通用方法仍然适用。

我做了很多专门旨在减少应用程序内存占用的项目,这种带有一些特定于应用程序的调整和技巧的通用方法总是很有效。

关于java - JVM 在服务器中使用了太多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21326360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com