问题标签 [java-memory-leaks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java Tomcat 应用程序堆大小比已用堆大很多
我正在开发一个在 Tomcat 的 1GB 内存服务器上运行的 Java Webapp。
最近我们注意到该应用程序占用了该服务器上的大部分内存 - 大约 83%。
我已经在我的个人机器上使用 VisualVM 对应用程序进行了概要分析,该机器具有更多的 RAM。
VisualVM 显示大约 400MB 已用堆空间,以及高达 1.4GB 的已分配堆空间。
设置 -Xmx512m 允许我降低分配的堆空间,而不会对站点性能产生任何重大影响。
几个问题:
- 这或多或少正常吗?为什么会这样?
- 有什么办法可以减少内存消耗?如果应用程序确实最终需要更多内存,则使用 -Xmx 限制占用的内存量可能会成为问题。
- 如果操作系统需要另一个说 100mb 用于另一个进程,java 会释放这个内存供操作系统使用,因为它没有使用堆并且只分配堆,或者操作系统会运行到内存问题吗?
macos - 在 Tomcat 上部署 Web 服务调用后,Tomcat 崩溃
在 tomcat 7.0.99 上部署了一个 web 服务
Tomcat 在 MacOS 上运行,我们正在对部署在 Tomcat 上的服务进行多次 Web 服务调用。完成第一次服务调用后,tomcat 崩溃(甚至其他服务也在处理中)。
当我在路径 /logs/ 中的 catalina.out 中进行验证时,发现日志如下
日志片段:
有人可以让我知道如何解决这个问题。
java - java.lang.OutOfMemoryError:Java 堆空间(JUnit 测试)
我有一个类,我使用输入流然后将其转换为字符串。我也有一个 Junit 测试,在那里我得到了异常“java.lang.OutOfMemoryError: Java heap space”,我知道问题是我在测试中有内存泄漏,但我不明白如何解决它.也许有人知道怎么做?
我的课:
我的 JUnit 测试:
堆栈跟踪:
memory-leaks - 为什么 Java11 将 java.util.zip.ZipFile$Source 保留在堆上?
有人可以帮助我了解我看到的是故意的、正确的行为还是 Java11 中的某种泄漏?让我们看一个简单的 hello world 应用程序:
唯一有趣的部分是 jar 依赖项。它可以是任何 jar,但为了使问题更加突出,让我们使用一个大的旧 gwt-user jar,它重 30MB:
运行应用程序,打开 jvisualvm,进行转储并查找保留的一组java.util.zip.ZipFile$Source
:
来自类路径的那个 jar(实际上从未使用过)占用了 1.5MB 的堆。它不会在 GC 期间消失,当你内存不足时它也不会消失,我什至在 OutOfMemory heapdumps 中看到了这些条目。
该条目显然由 map 保存java.util.zip.ZipFile$Source.files
。从源头上我可以看出,理论上这应该由来自 InnocuousThreadGroup 的 Common-Cleaner 线程进行清理,但我没有看到它发生。
我在将小型轻量级 Java 应用程序从 JDK8 迁移到 JDK11 时遇到了这个问题。与 JDK8 相比,在 Xmx 设置较低的情况下,这些 jar 占用了我堆的很大一部分。
那么它是一个错误还是一个功能?
java - java 11 和 Ubuntu 18 的 Spring Boot 我们应该使用哪个 Java 垃圾收集器
我们有 10 个 Spring Boot 应用程序在 ubuntu18 上运行,具有 8GB RAM 和 Java 11。
我们使用 java 垃圾收集器-XX:+UseSerialGC运行应用程序,而不限制堆空间。
但是几天后服务器内存完全耗尽并且服务器被挂起。
如果我们使用垃圾收集器,我们是否需要限制堆内存?
我也尝试过使用其他垃圾收集器,但除了 +UseSerialGC 没有任何效果。
java - Java - JSON字符串操作期间的OutOfMemoryError
我正在尝试追踪下面显示的 Java 代码中的内存泄漏。
OutOfMemoryError: heap space
此代码在仅处理少量文件更新后以 2 GB 的最大堆大小运行时抛出。- S3 上文件的压缩大小不超过几百 kB。
- 输入字符串(“修正”变量)不大于 1 MB。
- 堆转储显示
byte[]
大小为数百 MB - 在一种情况下,它占用了超过 50% 的堆空间。(然而,工具并没有指出这个数组的创建位置)。
它使用 AmazonS3 客户端实例在远程 S3 存储桶中读取和写入对象,还使用 Jackson 的 ObjectMapper 处理字符串并将它们转换为 JSON 等。java.util.zip
包中的 Deflater 和 Inflater 类用于压缩/解压缩。
这段代码是否存在明显的内存泄漏?是否有一个明显的错误可能导致堆上不断增长/巨大的字节数组?我一直在为这个问题挠头有一段时间了!谢谢。
java - 当本地内存小于转储堆的大小时,如何分析 Java 堆转储?
我有一个大约21G的非常大的hprof文件,它位于具有32G内存的远程服务器上,我想了解我的程序中发生了什么。但是,在我的本地桌面上,我只有8G内存,因此无法在本地启动此文件。
我试过了
但它在删除服务器时因内存不足错误而失败。
那么也许存在其他工具可以帮助我分析这个文件?