问题标签 [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.

0 投票
0 回答
163 浏览

java - 多模块项目的 Jenkins MAVEN 单元测试用例失败

错误 - Jenkins Maven 单元测试用例作业在多模块项目中遇到以下错误消息。我们也增加了内存值。除非我们去中止它,否则作业会连续执行。

詹金斯版 1.631

-DargLine="-DDB_SERVER=localhost -DDB_PORT=1234 -DDB_USER=project -DDB_PASSWORD=project -DDB_NAME=account -DDB_MAX_POOL=10" 全新安装

-Xmx3072m -XX:MaxPermSize=1024m

0 投票
1 回答
580 浏览

java - 线程“主”java.lang.OutOfMemoryError 中的异常:尝试验证数百万数据时的 Java 堆空间

从包含逐行数据的平面文件中,我的任务是验证来自 DB 的数据不存在 我正在尝试验证 首先使用 Java 我已将平面文件数据插入 HashSet1 和另一个 Hashset2 对于 DB 数据,之后我试图检查 Hashset1 .Contain(Hashset2) 以便我可以识别数据库中不存在哪些数据。

下面给出了虚拟代码,您可以假设 hashset1(这是一些缺失的数据)作为文件读取器数据,hashset2(来自 db 的完整数据)作为数据库数据

但是正如我在这里提到的,我有 3000 万个数据需要验证,我可以通过这种方式验证 100 万个数据,但无法验证 3000 万个数据,这是我的任务。有没有最好的方法来做这个好心的建议和某种代码,我们将非常感激。

错误堆栈跟踪:

0 投票
1 回答
3162 浏览

java - Spring Batch Jobs 不释放内存

我正在并行运行大约 18.000 个弹簧作业,每个作业都有一个步骤。每个步骤都包括从文件中读取、转换和操作这些值并将它们写入 Mongo 和 MySql 数据库,这没什么不寻常的。在所有作业完成后,内存消耗保持在 20GB USED并保持在那里。我按如下方式构建我的春季批次成员:

我创建一个工作如下:

并循环启动所有作业:

我是否必须以某种方式释放内存或在作业完成后删除作业?我不明白为什么内存消耗保持那么高。

此致

0 投票
0 回答
169 浏览

java - 为什么启用 TableMenuButton 时 Java FX TreeTableView 会泄漏内存?

启用 TableMenu 时,TreeTableView 出现内存泄漏。重现的步骤很简单。我已经做了一些研究为什么会发生这种情况,但会留给这里的专家来阐明。

使用 -Xmx 256m 运行嵌入式代码以减少等待时间。我正在使用 JDK 1.8.0_121

这两个步骤必须按顺序执行。

  1. 单击右上角的表菜单菜单按钮(+)一次,无需选择任何菜单项。
  2. 然后单击DYNAMIC列上的(X)(给 OOM 几秒钟)

    运行应用程序映像

0 投票
0 回答
902 浏览

java - 这是 Reactor 内存泄漏的标志吗?

我有一个使用 Fluxes 网络处理一些数据的应用程序。要处理的数据通过网络套接字接收。除了存储一些聚合值的处理管道的末端,应用程序应该是无状态的。但是,我看到堆大小不断增加。在我触发垃圾收集后查看切割点的红线时,您可以看到这一点:

在此处输入图像描述

图中的蓝色是使用的堆大小。

如果我查看堆上的内容,我会发现 Reactor 中的类具有最大的影响:

在此处输入图像描述

但是,我以前从未分析过基于 Reactor 的应用程序,我不确定这是否可能是 Reactor 中的内存泄漏。在制作上述屏幕截图之前,我在 JProfiler 中最初标记了堆之后,触发了垃圾收集并制作了堆快照。

这看起来像 Reactor 中的内存泄漏吗?

0 投票
1 回答
459 浏览

java - 在 Java 中覆盖(归零)字符串密码

我犯了将密码存储为 Java 程序中的字符串的错误。我想防止这个字符串密码出现在堆转储/内存转储中。理想情况下,我应该使用 char[] 并在使用后将其填充为零(如本文所推荐 - https://nvisium.com/resources/blog/2016/03/31/secure-password-strings.html) .

我阅读了一些 SO 帖子并了解字符串是不可变的,它们不能被覆盖。我的问题是 - 有没有办法用零替换已经创建的字符串的内容?

注意:我现在无法将实现更改为使用 char[],因为我从返回字符串的模块/库中获取此字符串。

0 投票
0 回答
159 浏览

java - 线程错误 Memcached 云 Heroku Java

背景

我们正在使用 Memcached 云在 Heroku 中使用 1 个 dyno 开发 Java 服务。

问题

同时我们正在开发和测试它,它工作正常。但是,当我们决定在真实环境中对其进行测试时,它开始返回以下错误:

java.lang.OutOfMemoryError: unable to create new native thread java.lang.Thread.start0(Native Method) java.lang.Thread.start(Thread.java:717) net.spy.memcached.MemcachedConnection.<init>(MemcachedConnection.java:306) net.spy.memcached.DefaultConnectionFactory.createConnection(DefaultConnectionFactory.java:209) net.spy.memcached.MemcachedClient.<init>(MemcachedClient.java:209) Memcached.<init>(Memcached.java:34) Main.lambda$main$1(Main.java:101) spark.SparkBase$1.handle(SparkBase.java:311) spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:159) spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179)
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) org.eclipse.jetty.server.Server.handle(Server.java:451) org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252) org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266)
org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240)
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596)
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527) java.lang.Thread.run(Thread.java:748)

我们没有太多的客户来达到 256 个进程或线程(1 dyno 的限制)

解决方法

我们还不知道

代码 <!--Main--> //... try { memcached = new Memcached (); } catch (Exception e) { memcached = null; } //...

任何人都知道我们该如何解决这个错误?

编辑:我已阅读帖子Java: Unable to create new native thread,但这不是我们的问题。我们检查了他们在那里所说的属性,但我们有很好的价值。但是,我可以看到每次初始化 memcached 时,它都会创建一个新线程,但是当服务停止时该线程不会被删除。有问题。

0 投票
1 回答
311 浏览

java - Javafx TextField 内存问题

我可以使用一些帮助来调试内存(泄漏?)问题。我在下面做了一个简单的例子。Javafx 中有一些与 TextFields 相关的错误。下面的代码将 2000 个文本字段添加到 ScrollPane 中的 FlowPane。根据任务管理器的说法,Java 在这一点上使用了 ~420mb。

每次按下添加按钮时,都会添加另外 2000 个文本字段。每次可能增加 80-200 mb (不知何故,它并不总是相同的内存量??)。删除按钮会删除文本字段,但永远不会释放内存。这是Java jdk 9,据我所知,GC应该释放不再使用的内存并将其返回给操作系统。将 TextFields 更改为 Texts 可以解决问题,占用更少的内存,并在适当的时候将其返回给操作系统,但我更喜欢 TextFields。有谁知道如何解决/解决这个问题?:-)

0 投票
1 回答
185 浏览

java - 匿名类隐藏对局部变量的引用

我在我的 Android 应用程序中遇到了报告的内存泄漏,经过一番调查,我几乎找到了泄漏的位置,这里是简化的代码:

发生泄漏是因为我调用了一个函数“startLeak”。活动变量将被泄露。但是,如果我调用“startLeak2”,则不会发生泄漏。我想知道为什么在第一种情况下会有泄漏。Wrapper 也使用 Wea​​kReference。

LeakActivity 类占用大约 30M 的内存。在 Android 设备上调用 startLeak 大约 5 次会导致 OOM。调用 startLeak2 不会。如果使用 startLeak 而不是 startLeak2,LeakCanary 工具会报告泄漏。

0 投票
1 回答
566 浏览

java - PMD 内存泄漏

在 windows 上的 eclipse 中使用 pmd 时出现严重的内存泄漏。我导入了一堆大型 Maven 项目。在 m2e 和编译之后,PMD 启动。然后它最终在工作区中的许多(大约 50 个)项目中并行运行大约 8-10 个 eclipse 作业实例。然后进程大小无限增长,直到机器上的虚拟内存耗尽(大约 12 GB 左右)并且 PC 完全冻结。

我在 eclipse.ini 中的内存配置:

此处 2 GB 的堆大小限制似乎没有太大影响。我怀疑分配的 vm 内存不是 java 堆,而是类加载器元空间或来自本机 dll。

我的机器上有 32 GB RAM。使用 java 1.8.0_121。

这是进程变得危险大之前不久的 vmmap 快照,我必须杀死它:

内存快照

我尝试jcmd PID GC.class_stats针对该进程运行,但在这里看不到问题,因为总字节数仅为 ~1.4 GB:

我没有太多在 Windows 上分析本机进程的经验。我如何确定是什么在无休止地分配这么多内存?