Confluence is causing large CPU usage spikes intermittently on Windows
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Problem
Confluence is causing large CPU spikes intermittently on Windows. Confluence performance becomes slow and sometimes crashes entirely.
Diagnosis
Follow Generating a Thread Dump Externally to generate multiple thread dumps. Check for blocked threads that contain a lock for java.security.SecureRandom
The following is an example blocked thread:
"http-nio-80-exec-7" #166 daemon prio=5 os_prio=0 tid=0x000000002f05e000 nid=0x1764 waiting for monitor entry [0x0000000043323000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.security.SecureRandom.nextBytes(Unknown Source)
- waiting to lock <0x00000006873088c8> (a java.security.SecureRandom)
at java.util.UUID.randomUUID(Unknown Source)
at com.atlassian.confluence.content.render.xhtml.editor.macro.DefaultMacroIdSupplier.get(DefaultMacroIdSupplier.java:19)
Cause
There is a known issue with Java and Tomcat in he library used for random number generation in Sun's JVM which relies on /dev/random.
This random number generator can block the application server process from starting 'because on some operating systems /dev/random
waits for a certain amount of "noise" to be generated on the host machine before returning a result' (see Avoiding JVM Delays Caused by Random Number Generation).
Workaround
- Stop Confluence
- Add the flag
-Djava.security.egd=file:/dev/urandom
to the Java arguments to usedev/urandom
by following Configuring System Properties - Start Confluence