如何减少JAVA应用程序的CPU使用率?

时间:2015-08-10 03:01:14

标签: java linux performance jvm

Linux机器上有两个Java进程(A,B)(CentOS 6.5 64位)。 A使用套接字向B发送大量二进制数据。 B将数据写入磁盘。每秒将50-100MB数据写入磁盘。在四核处理器上,CPU几乎100%使用。以前我们运行过类似的应用程序但是用C编写,只使用了25%的CPU。

我们做了很多调整。我们了解到有一些epoll错误,然后我们将JDK版本升级到1.8。我们还做了一些JVM调优。现在总CPU使用率比以前低,但我们不满意。我们认为我们可以减少它。

有大量数据写入磁盘。我们认为磁盘不是瓶颈。因为我们使用大型RAID。我们之前使用C编写的类似应用程序运行了更多的磁盘带宽,一切正常。

但我们也发现了一个问题。当内核将脏数据刷新到磁盘时,CPU使用率将非常高。所以我们增加/ proc / sys / vm / dirty_background_ratio以便尽可能地进行异步刷新。在我们更改了值之后,它似乎可以工作,但过了一段时间后,再次出现高CPU问题。

我们能否为具有高IO带宽的Java应用程序进行更多性能调整?

1 个答案:

答案 0 :(得分:1)

在进行性能调优之前,您需要找出主导CPU时间的因素。

这是一个多方面的主题,你必须看看内核在做什么,以什么速度发出哪些系统调用,你的访问模式是什么,文件系统和其他存储层如何影响这些特性各种文件系统操作等。

Netflix最近提出了get full kernel/userspace/java stacks的方法,这可能是一个有用的起点,但还有许多其他事情需要监控。