我确实遇到了我开发的应用程序的问题。当我长时间运行它时,CPU负载缓慢上升。这是45分钟后Java VisualVM的屏幕截图。增加的CPU负载来自哪里?
正如你可以看到,内存占用是非常稳定和线程,以及数量。应用程序打开一个LAN插座并每2秒进行一次测量。这个测量运行在一个单独的线程中(可以在右下方的线程图中看到)。
CPU使用率缓慢而稳定地增加,一夜之间累积到70-80%左右,此时整个系统明显放慢(显然)。现在我不想要这个增长,但是找不到原因。没有内存泄漏(这也会导致内存的连续增加),也不会产生越来越多的线程(因为这个计数也是稳定的)。
我的应用程序有一个广泛的GUI和几个线程。下面是从探查线程列表:
我标有“我”的线程黄色。因此,MeasurementCommunication.startMeasurement
线程会在需要时创建(并再次终止)。所以只有其中一个人在任何时候运行。
因此,长话短说:我不知道这个CPU的增加来自哪里。你有什么想法?也许这是一个普遍的Java问题? 如果您需要更多信息或详细信息,请告诉我,我尝试回答。 ;)
配置文件的CPU使用情况,并查看热点时它的位置。 – bmargulies
您是否监控过GC时间(例如-verbose:gc)? – assylias
@assylias会带来什么?你认为GC不能正确工作吗? – brimborium