Java中的CPU利用率太低

时间:2009-01-11 23:14:59

标签: java cpu utilization

嘿stackoverflow社区!

我遇到的问题是高度参与的算法程序正在使用TOO LITTLE cpu利用率:介于3%到4%之间。返回结果需要很长时间,而且我认为这还不够努力。

你们中的任何一位天才都有任何想法会发生这种情况 - 如果有的话,我会期望100%的利用率。另外一个细节是该程序插入到sqlite3数据库中,因此,我相信通过sqlite3jdbc库有很多JNI调用。 (请注意,我之前想要使用PreparedQuery批处理延迟这些插入,但这会导致严重的内存问题 - 有大量数据)。

提前致谢

更新:已修复。是的,我只是一个doofus,但我没想到sqlite会启动一个新的事务,并且做了很多开销。

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

4 个答案:

答案 0 :(得分:4)

如果类型IV,100%Java版本可用,我绝不会建议有人使用带有JNI的JDBC驱动程序。 Google发现this一个。

除此之外,没有更多信息,我无法说出任何话。应用程序和数据库是否在同一硬件上运行?

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

我建议分析并获取一些真实数据而不是猜测。基于信仰的计算永远不适合我。

答案 1 :(得分:1)

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

编辑:

还有一些其他问题领域:

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

应考虑所有这些因素

答案 2 :(得分:1)

如果您正在编写大量数据,那么听起来您可能受到磁盘限制。看看机器上的磁盘io统计数据,如果这确实是瓶颈,要么找到更好的io硬件,要么找出如何做更少的写入。

答案 3 :(得分:0)

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

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