TongWeb8.0 JNDI缓存
TongWeb8.0.9.10和8.0.9.11版本默认开启了JNDI缓存若遇到如下异常或线程阻塞在com.tongweb.naming.JndiCache上则增加参数-Dtongweb.disableJndiCachetrue关闭缓存。TongWeb8.0.9.12及之后版本默认关闭了JNDI缓存。#部署应用异常 Caused by: java.lang.IllegalStateExcception: Recursive update at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java) at com.tongweb.naming.JndiCache.lookup(JndiCache.java:80) #访问阻塞在JndiCache上 TW-8088-2 #86 daemon prio5 os_prio0 tid0x00000289a7373800 nid0x69f4 runnable [0x000000bb038fb000] java.lang.Thread.State: RUNNABLE at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1718) at com.tongweb.naming.JndiCache.lookup(JndiCache.java:80) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup0(ContextHandler.java:47) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup(ContextHandler.java:42) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookup0(IvmContext.java:192) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:159) at com.tongweb.tongejb.core.ivm.ContextHandler.lookupInternal(ContextHandler.java:71) at com.tongweb.tongejb.core.ivm.ContextHandler.lambda$lookup0$0(ContextHandler.java:47) at com.tongweb.tongejb.core.ivm.ContextHandler$$Lambda$164/1730914651.lookup(Unknown Source) at com.tongweb.naming.JndiCache.lambda$lookup$1(JndiCache.java:82) at com.tongweb.naming.JndiCache$$Lambda$166/28020301.apply(Unknown Source) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) - locked 0x00000000d8f16a28 (a java.util.concurrent.ConcurrentHashMap$ReservationNode) at com.tongweb.naming.JndiCache.lookup(JndiCache.java:80) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup0(ContextHandler.java:47) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup(ContextHandler.java:42) at javax.naming.InitialContext.lookup(InitialContext.java:417) TW-8088-5 #89 daemon prio5 os_prio0 tid0x0000022a45da0800 nid0x7d9c waiting for monitor entry [0x0000006a471fb000] java.lang.Thread.State: BLOCKED (on object monitor) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1674) - waiting to lock 0x00000000d9a443b0 (a java.util.concurrent.ConcurrentHashMap$ReservationNode) at com.tongweb.naming.JndiCache.lookup(JndiCache.java:80) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:160) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup0(ContextHandler.java:62) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup(ContextHandler.java:41) at javax.naming.InitialContext.lookup(InitialContext.java:417) at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155) at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)如果遇到在JNDI处栈溢出或jstack时在JNDI处执行时间过长的情况升级到TongWeb8.0.9.12及之后版本。Caused by: java.lang.StackOverflowError at java.naming/javax.naming.Reference.get(Reference.java:225) at java.naming/javax.naming.LinkRef.getLinkName(LinkRef.java:105) at com.tongweb.naming.NamingContext.lookup0(NamingContext.java:796) at com.tongweb.naming.NamingContext.lookup(NamingContext.java:765) at com.tongweb.naming.NamingContext.lookup(NamingContext.java:139) at com.tongweb.naming.NamingContext.lookup0(NamingContext.java:793) at com.tongweb.naming.NamingContext.lookup(NamingContext.java:765) at com.tongweb.naming.NamingContext.lookup(NamingContext.java:152) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup0(ContextHandler.java:49) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup(ContextHandler.java:41) at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409) at com.tongweb.naming.NamingContext.lookup0(NamingContext.java:801) at com.tongweb.naming.NamingContext.lookup(NamingContext.java:765) at com.tongweb.naming.NamingContext.lookup(NamingContext.java:139) at com.tongweb.naming.NamingContext.lookup0(NamingContext.java:793) at com.tongweb.naming.NamingContext.lookup(NamingContext.java:765)# 通过jstack查看lookup过多占用时间长。 TW-9060-4 #335 [2901931] daemon prio5 os_prio0 cpu147357.79ms elapsed291.56s tid0x0000fffe5cd5d6d0 nid2901931 runnable [0x0000fffe06eb3000] java.lang.Thread.State: RUNNABLE at java.lang.Throwable.fillInStackTrace(java.base21.0.10/Native Method) at java.lang.Throwable.fillInStackTrace(java.base21.0.10/Throwable.java:820) - locked 0x00000000b470d780 (a javax.naming.NameNotFoundException) at java.lang.Throwable.init(java.base21.0.10/Throwable.java:273) at java.lang.Exception.init(java.base21.0.10/Exception.java:67) at javax.naming.NamingException.init(java.naming21.0.10/NamingException.java:127) at javax.naming.NameNotFoundException.init(java.naming21.0.10/NameNotFoundException.java:50) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookup0(IvmContext.java:231) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookupInternal(IvmContext.java:168) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:162) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup0(ContextHandler.java:65) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup(ContextHandler.java:41) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookup0(IvmContext.java:201) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookupInternal(IvmContext.java:168) at com.tongweb.tongejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:162) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup0(ContextHandler.java:61) at com.tongweb.tongejb.core.ivm.ContextHandler.lookup(ContextHandler.java:41) at javax.naming.InitialContext.lookup(java.naming21.0.10/InitialContext.java:409) at org.springframework.jndi.JndiTemplate.lambda$lookup$0(JndiTemplate.java:71) at org.springframework.jndi.JndiTemplate$$Lambda/0x00000070015e12a0.doInContext(Unknown Source) at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:37) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:71) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:83) at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:96) at org.springframework.jndi.JndiLocatorDelegate.lookup(JndiLocatorDelegate.java:64) at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:78) at org.springframework.jndi.JndiLocatorDelegate.lookup(JndiLocatorDelegate.java:59) at org.springframework.jndi.JndiPropertySource.getProperty(JndiPropertySource.java:93)