EAP 7 has high CPU in KeyAffinityServiceImpl

Solution Verified - Updated

Environment

  • Red Hat JBoss Enterprise Application Platform (EAP)
    • 7.3.9
    • 7.4.1

Issue

  • EAP 7 has increased CPU from KeyAffinityService threads persisting in generateKeys calls like below:
"KeyAffinityService Thread Pool -- 2" #303 prio=5 os_prio=0 tid=0x000055cd2403c000 nid=0x5f84 runnable [0x00007fc931e1e000]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileInputStream.readBytes(Native Method)
	at java.io.FileInputStream.read(FileInputStream.java:255)
	at sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:424)
	at sun.security.provider.NativePRNG$RandomIO.ensureBufferValid(NativePRNG.java:526)
	at sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:545)
	- locked <0x000000008a970208> (a java.lang.Object)
	at sun.security.provider.NativePRNG$RandomIO.access$400(NativePRNG.java:331)
	at sun.security.provider.NativePRNG.engineNextBytes(NativePRNG.java:220)
	at java.security.SecureRandom.nextBytes(SecureRandom.java:478)
	at io.undertow.server.session.SecureRandomSessionIdGenerator.createSessionId(SecureRandomSessionIdGenerator.java:54)
	at org.wildfly.clustering.web.undertow.IdentifierFactoryAdapter.createIdentifier(IdentifierFactoryAdapter.java:42)
	at org.wildfly.clustering.web.undertow.IdentifierFactoryAdapter.createIdentifier(IdentifierFactoryAdapter.java:32)
	at org.wildfly.clustering.web.infinispan.AffinityIdentifierFactory.getKey(AffinityIdentifierFactory.java:56)
	at org.wildfly.clustering.web.infinispan.AffinityIdentifierFactory.getKey(AffinityIdentifierFactory.java:37)
	at org.infinispan.affinity.impl.KeyAffinityServiceImpl$KeyGeneratorWorker.generateKeys(KeyAffinityServiceImpl.java:265)
  • And increased counts of request threads blocked like below:
	at sun.misc.Unsafe.park(Native Method)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
	at java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.java:418)
	at org.infinispan.affinity.impl.KeyAffinityServiceImpl.getKeyForAddress(KeyAffinityServiceImpl.java:140)
	at org.wildfly.clustering.web.infinispan.AffinityIdentifierFactory.createIdentifier(AffinityIdentifierFactory.java:51)
	at org.wildfly.clustering.web.infinispan.session.InfinispanSessionManager.createIdentifier(InfinispanSessionManager.java:162)
	at org.wildfly.clustering.web.infinispan.session.InfinispanSessionManager.createIdentifier(InfinispanSessionManager.java:72)
	at org.wildfly.clustering.web.cache.session.ConcurrentSessionManager.createIdentifier(ConcurrentSessionManager.java:96)
	at org.wildfly.clustering.web.cache.session.ConcurrentSessionManager.createIdentifier(ConcurrentSessionManager.java:45)
	at org.wildfly.clustering.web.undertow.session.DistributableSessionManager.createSession(DistributableSessionManager.java:162)
	at io.undertow.servlet.spec.ServletContextImpl.getSession(ServletContextImpl.java:959)
	at io.undertow.servlet.spec.HttpServletRequestImpl.getSession(HttpServletRequestImpl.java:417)
	at io.undertow.servlet.spec.HttpServletRequestImpl.getSession(HttpServletRequestImpl.java:422)

Resolution

  • Upgrade to EAP 7.3.10 or preferably 7.4.2+

Root Cause

Components
Category

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.