当前位置: 首页 > 知识库问答 >
问题:

多线程Optaplanner中的内存泄漏?

魏波娃
2023-03-14

我的Optaplanner似乎出现了内存泄漏。要复制,只需下载Quarkus示例

git clone https://github.com/quarkusio/quarkus-quickstarts.git
cd quarkus-quickstarts/optaplanner-quickstart

然后通过增加终止时间(例如,将quarkus.optaplanner.solver.termination.spent-limited=10h)和取消注释表示quarkus.optaplanner.solver.move-thread-count=2的行来更改src/main/Resources/application.properties以启用多线程。

然后,运行手册中的请求:

./mvnw compile quarkus:dev
curl -i -X POST http://localhost:8080/timeTable/solve -H "Content-Type:application/json" -d '{"timeslotList":[{"dayOfWeek":"MONDAY","startTime":"08:30:00","endTime":"09:30:00"},{"dayOfWeek":"MONDAY","startTime":"09:30:00","endTime":"10:30:00"}],"roomList":[{"name":"Room A"},{"name":"Room B"}],"lessonList":[{"id":1,"subject":"Math","teacher":"A. Turing","studentGroup":"9th grade"},{"id":2,"subject":"Chemistry","teacher":"M. Curie","studentGroup":"9th grade"},{"id":3,"subject":"French","teacher":"M. Curie","studentGroup":"10th grade"},{"id":4,"subject":"History","teacher":"I. Jones","studentGroup":"10th grade"}]}'

内存使用量开始稳步增加,同时生成了数百万个PhreakPropagationContext对象。我认为这不是预期的行为。我应该为此制造问题还是遗漏了什么?

共有1个答案

仲法
2023-03-14

我审查了你的问题,调查了这个问题,最后提出了一个错误。修复程序计划包含在OptaPlanner 8.13.0.Final中。

 类似资料:
  • 我有一个课程调度问题,带有用于分数计算的约束流。当求解分配的堆时,它会不断增加,因此在几个小时后甚至超过8GB,我得到了一个java.lang.OutOfMemoryError:java堆空间。正如optaplanner文档中所述,堆大小在求解器阶段应保持不变。我需要关于这种行为的问题以及如何调试的建议。 optaplanners toList ConstraintCollector中提供的复制器

  • 问题内容: 在多个帖子中都提到了这一点:不当使用会导致内存泄漏。我正在努力了解使用内存泄漏将如何发生。 我发现的唯一情况如下: Web服务器维护一个线程池(例如,用于servlet)。如果未删除其中的变量,则这些线程可能会导致内存泄漏,因为线程不会死亡。 这种情况下没有提到“ Perm Space”内存泄漏。那是内存泄漏的唯一(主要)用例吗? 问题答案: PermGen的exhaustions 与

  • 我在log4j v1中面临内存泄漏的问题。如何解决这个内存泄漏问题。此方法是定期检查log4j.properties文件在我的类中的更新。 PropertyConfigutaror.ConfigureandWatch(time_ms); 但是在关机期间,tomcat内存泄漏问题就来了。日志如下: 提前致谢

  • 我的WebLogic服务器配置了16GB的堆空间,但当大多数用户开始工作时,90%的堆空间在生产使用1小时内就被使用了。我观察到每当这种情况发生时,都有几条线卡住了。 我已经检查了线程转储,没有“等待锁定”对象线程,线程类似于如下所示,线程没有明显的原因被卡住。

  • 问题内容: Apache Tomcat多次说: Web应用程序[/ MyServlet]似乎已启动名为[pool-61-thread-2]的线程,但未能停止它。这很可能造成内存泄漏。 这很危险吗?该servlet应该每天能够处理10.000个请求。完成后如何关闭线程? 问题答案: 是的,这是一个问题。如果您的代码启动非守护程序线程,则这些线程将继续工作,直到退出运行方法。即使其他一切都完成了,当这

  • 我尝试用一个大表(大约一万条记录)中的记录填充JdbcRowSet。我尝试了两个变体(参见下面的代码): 创建连接对象,使用JdbcRowSetImpl(connection)实例化,在循环中执行查询。 使用JdbcRowSetImpl(DriverManager.GetConnection(“jdbc:....”)实例化,在循环中执行查询。 第一个变体会导致内存泄漏,直到堆满为止。第二个变体没有