【问题标题】:Too Little CPU Utilization in JavaJava 中的 CPU 使用率太低
【发布时间】:2010-09-30 20:14:30
【问题描述】:

嘿 stackoverflow 社区!

我遇到了一个问题,即高度参与的算法程序使用的 CPU 利用率太低:大约在 3% 到 4% 之间。返回结果需要很长时间,而且我认为它还不够努力。

你们中的任何一个天才是否知道为什么会发生这种情况 - 如果有的话,我希望 100% 的利用率。一个额外的细节是程序插入到 sqlite3 数据库中,因此是的,我相信有很多通过 sqlite3jdbc 库的 JNI 调用。 (请注意,我想早先使用 PreparedQuery 批处理延迟这些插入,但这会导致严重的内存问题 - 有很多数据)。

提前致谢

更新:已修复。是的,我只是个傻瓜,但我没想到 sqlite 会启动一个新事务并做这么多开销。

我现在使用 PreparedStatement 并在插入前排队 32768 个条目 - 对我来说似乎是一个足够好的数字。

【问题讨论】:

    标签: java cpu utilization


    【解决方案1】:

    如果有类型 IV、100% Java 版本可用,我绝不会建议有人将 JDBC 驱动程序与 JNI 一起使用。谷歌找到了this 一个。

    除此之外,如果没有更多信息,我什么也说不出来。应用程序和数据库是否在同一硬件上运行?

    什么是关于 INSERT 的“密集”?

    我建议进行分析并获取一些真实数据,而不是猜测。基于信仰的计算对我来说永远不起作用。

    【讨论】:

      【解决方案2】:

      显然数据库调用导致了延迟。创建较小的批次并测试是否有帮助不是一种选择吗?也许你也可以并行化算法,让一个队列在某处获取结果,另一个线程清理该队列?

      编辑:

      还有一些其他的问题领域:

      • 数据库优化(模型)
      • 数据库服务器配置
      • 磁盘速度

      所有这些因素都应考虑在内

      【讨论】:

        【解决方案3】:

        如果您要写入大量数据,那么听起来您可能会受到磁盘限制。查看机器上的磁盘 io 统计信息,如果这确实是瓶颈,请找到具有更好 io 的硬件,或者弄清楚如何减少写入。

        【讨论】:

          【解决方案4】:

          磁盘正在减慢您的应用程序。 INSERTS 使用磁盘,磁盘很慢,操作系统需要等待写操作完成。

          您不能使用 2 个线程,一个用于算法,另一个用于插入吗? 如果您只进行插入,您也可以将 then 写入文本文件,并在稍后执行它们

          【讨论】:

          • 多线程通信比在同一个线程中排队更新和刷新它们要慢,而且对于不是“天生线程安全”的程序员来说,获得无错误也更复杂。
          猜你喜欢
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多