4

我开发的应用程序确实有问题。当我长时间运行它时,CPU负载会慢慢上升。这是 45 分钟后 Java VisualVM 的屏幕截图。

在此处输入图像描述

如您所见,内存使用量和线程数非常恒定。应用程序打开一个 LAN 插座并每 2 秒进行一次测量。此测量在单独的线程中运行(可以在右下角的线程图中看到)。

CPU 使用率缓慢但肯定地增加,一夜之间它累积到 70-80% 左右,此时整个系统显着减慢(显然)。现在我当然不希望这种增加,但找不到原因。没有内存泄漏(这也会导致内存不断增加),也没有生成越来越多的线程(因为计数也很稳定)。

我的应用程序有一个广泛的 GUI 和几个线程。以下是分析器中的线程列表:

在此处输入图像描述

我将“我的”线程标记为黄色。因此,MeasurementCommunication.startMeasurement只要需要,就会创建(并再次终止)线程。所以任何时候只有一个人在奔跑。

所以长话短说:我不知道 CPU 的增加是从哪里来的。你有什么想法?也许这是一个普遍的Java问题? 如果您需要更多信息或细节,请告诉我,我会尽力回答。;)

4

1 回答 1

3

看看你用过的堆,它确实从 17:00 开始向上移动,你需要做的是捕获它更长的时间,并确保它确实爬回并保持上升/下降,但通常使用持平,如果它开始产生类似步骤的结果,即越来越多地向上增加,那么它可能是内存泄漏导致的问题,然后影响你的 CPU。所以简而言之,当堆爬升时,您需要更长时间地观察它。所以每次完整垃圾回收之间的状态......

于 2013-02-06T16:14:49.787 回答