多个请求卡顿300秒左右,线程dump发现如下内容:
"nioEventLoopGroup-2-1" Id=98 BLOCKED on java.util.concurrent.ConcurrentHashMap@4bce3407 owned by "ThreadPool-1-thread-9" Id=414 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:186) - blocked on java.util.concurrent.ConcurrentHashMap@4bce3407 at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:486) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:436) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:412) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:398) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:337) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:331) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:968)
ThreadPool-1-thread-9 正在连接https网址,实际上它连不上。 但是连接超时设置的高达100秒,导致一直在等待。
该线程实际是xxxx类的init()方法,该bean是懒加载, 所以调用时,spring需要getBean,先执行init方法,但是里面执行https请求,卡住, spring的getBean是带同步锁定的, 所以后续的getBean都会被卡住,包括Controller里的注入,所以现象就是整体不可用。
|