TongWeb8.0.9.10和8.0.9.11版本默认开启了JNDI缓存,若遇到如下异常或线程阻塞在com.tongweb.naming.JndiCache上,则增加参数-Dtongweb.disableJndiCache=true关闭缓存。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 prio=5 os_prio=0 tid=0x00000289a7373800 nid=0x69f4 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 prio=5 os_prio=0 tid=0x0000022a45da0800 nid=0x7d9c 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 prio=5 os_prio=0 cpu=147357.79ms elapsed=291.56s tid=0x0000fffe5cd5d6d0 nid=2901931 runnable [0x0000fffe06eb3000] java.lang.Thread.State: RUNNABLE at java.lang.Throwable.fillInStackTrace(java.base@21.0.10/Native Method) at java.lang.Throwable.fillInStackTrace(java.base@21.0.10/Throwable.java:820) - locked <0x00000000b470d780> (a javax.naming.NameNotFoundException) at java.lang.Throwable.<init>(java.base@21.0.10/Throwable.java:273) at java.lang.Exception.<init>(java.base@21.0.10/Exception.java:67) at javax.naming.NamingException.<init>(java.naming@21.0.10/NamingException.java:127) at javax.naming.NameNotFoundException.<init>(java.naming@21.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.naming@21.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)