optaplanner - OptaPlanner,Score计算速度会太低
问题描述
运行我的 optaplanner 项目并得到以下输出。好像有两个问题。这些输出是什么意思?第一个是
Score calculation speed will be too low because move thread ({})'s destroy wasn't processed soon enough.
另一个是
ERROR 603112 --- [pool-1-thread-3] o.o.core.impl.solver.thread.ThreadUtils : Multithreaded Local Search's ExecutorService didn't terminate within timeout (1 seconds).
包含错误的输出在这里。
application.properties 是从某处复制的,不太了解。文件是这样的:
spring.datasource.url=jdbc:h2:mem:fedb;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
logging.level.root=INFO
logging.level.org.springframework=INFO
logging.level.org.drools=INFO
logging.level.org.optaplanner.core=INFO
optaplanner.solver.termination.spent-limit=2s
optaplanner.solver.move-thread-count=10
optaplanner.solver.environment-mode=NON_REPRODUCIBLE
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
server.port=8090
回答 Geoffrey 的问题:使用 Java 1.8.0_241,OptaPlanner optaplanner-bom 7.59.0.Final。终止时间设置为 2 秒,应用程序会按时退出并提供有效的解决方案。昨天的错误输出可以一直重现,但今天完全没有错误,没有代码更改。真的很奇怪。今天的输出就到这里了。我觉得我应该删帖。
解决方案
除了 Geoffrey 的回答之外,我还想从您提供的日志中再指出一件事:
The resolvedMoveThreadCount (10) is higher than the availableProcessorCount (8), which is counter-efficient.
您似乎过度扩展了您的机器。所有这些上下文切换可能会使您的求解器陷入停顿。
此外,我相信当前的最佳实践是不要超过 4 个移动线程,因为求解器可能无论如何都不会超过那个。
推荐阅读
- drupal - 在我的 mac 终端上运行 blt vm 命令时,我遇到了 drupal VM 的问题
- node.js - 为什么即使在全局安装 express.js 之后,我仍然无法使用 express.js 运行文件
- sequelize.js - 如何在迁移中通过 sequelize changeColumn 方法更新 mariadb 列的排序规则?
- javascript - 它是一个正确的正则表达式,有空格并且在`some chancter`之间。?
- react-native - 为什么 flatlist 无法放入容器中 - React Native
- apache-spark - 每个 Micro Batch 中的最大偏移量
- firebase - 通过带有 `--params` 标志的 CLI 安装 Firebase 扩展不会绕过交互式提示
- c# - C# 异步函数 - await 是否立即在新线程上启动任务?
- flutter - 想要在没有按钮的情况下让共享的 pref 工作
- node.js - 如何通过 Yarn Workspaces(使用 CMD)在 Dockerfile 中使用参数?