I do have problems with an application I developed. When I run it over long period of times, the CPU load goes slowly up. Here is a screenshot of Java VisualVM after 45 minutes.

As you can see, memory usage is very constant and the number of threads as well. The application opens a LAN socket and makes a measurement every 2 seconds. This measurement is running in a separate thread (which can be seen in the thread plot bottom right).
The CPU usage increases slowly but surely, overnight it accumulates to around 70-80% at which point the whole system is considerabely slowed down (obviously). Now I don’t want this increase of course but can not find the reason for it. There is no memory leak (which would result in a continuous increase of memory as well) nor do I generate more and more threads (because that count is stable as well).
My app has an extensive GUI and several threads. Here is the thread list from the profiler:

I marked “my” threads yellow. So the MeasurementCommunication.startMeasurement threads are created (and terminated again) whenever needed. So there is only one of those guys running at any time.
So to cut a long story short: I don’t know where this CPU increase comes from. Do you have any ideas? Maybe that’s a general Java problem?
If you need any more information or details, just tell me and I try to answer them. 😉
Just having a look at your used heap, it does appear from 17:00 to go upwards, what you would need to do is to capture it for a longer period and ensure it does climb back down and keeps up/down but typically flat usage, if it starts to produce results like steps i.e. incrementing further and further upwards then it could be a memory leak causing the issue which then impacts your cpu. so in short you need to watch it for longer specially when the heap climbs. So the state between each full garbage collection….