Can you get a few thread dumps with a difference of seconds between them and paste them here? Use kill -3 [process_id] to get the thread dumps. Information will be logged in the stdout. Get the dumps when CPU goes high (e.g. 99%). That information will tell us what the server is doing. The server should handle fine no matter which client you are using.
Could you explain why i can’t forbid Empathy to connect even if i restrict the permitted client?
Probably because Empathy is not listed in this plugin. This filter is very simplistic and very easy to override, you just has to change your clients ID. Client Control plugin’s filter wasnt intended to do strong control. It can only help against novice users.
The CPU is hitting ~100% due to the OutOfMemory (OOM) problem. The thread dump is showing a server with no activity at the moment of the snapshot. What we need to see now is a heapdump of the JVM. There is an easy way to get one when the JVM runs OOM and that is by adding
-XX:+HeapDumpOnOutOfMemoryError to the command line when starting up the server.
Since memory leaks are just like any other leak…i.e. they happen (slowly or quickly) during seconds, minutes, hours or days we can also get heap dumps every couple of (e.g) hours and compare them. If we see that a given object is being accumulated during that time then we found the source of the leak without having to wait for the OOM. In summary, if your OOM problem happens every X days then you might want to create manual heap dumps every hour and post them here so we can analyze them. If the problem is easy to reproduce then it is better to just wait for the OOM since our analysis effort will be easier and more certain. To create manual heap dumps you need to run from the command line: jmap -dump:live,format=b,file=[name_of_output_file] [process_id].