polarismesh / polaris-java

Lightweight Java SDK used as Proxyless Service Governance
Other
136 stars 82 forks source link

SpringBoot集成springcloud tencent1.11.2-2020.0.6版本在pod容器内启动偶尔失败,抛出异常 #500

Closed glacier-archit closed 4 months ago

glacier-archit commented 4 months ago

polaris Version: 1.12.2

Describe the bug 通过jenkins打包构建项目,发布到K8S pod容器偶尔(不是必现,偶尔出现)抛出如下异常,导致容器启动失败 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'polarisDiscoveryHandler' defined in class path resource [com/tencent/cloud/polaris/DiscoveryPropertiesAutoConfiguration.class]: Unsatisfied dependency expressed through method 'polarisDiscoveryHandler' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'polarisProvider' defined in class path resource [com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.class]: Unsatisfied dependency expressed through method 'polarisProvider' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'polarisContext' defined in class path resource [com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.tencent.polaris.client.api.SDKContext]: Factory method 'polarisContext' threw exception; nested exception is com.tencent.polaris.api.exception.PolarisException: ERR-2100(UNKNOWN_SERVER_ERROR): at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'polarisProvider' defined in class path resource [com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.class]: Unsatisfied dependency expressed through method 'polarisProvider' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'polarisContext' defined in class path resource [com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.tencent.polaris.client.api.SDKContext]: Factory method 'polarisContext' threw exception; nested exception is com.tencent.polaris.api.exception.PolarisException: ERR-2100(UNKNOWN_SERVER_ERROR): at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'polarisContext' defined in class path resource [com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.tencent.polaris.client.api.SDKContext]: Factory method 'polarisContext' threw exception; nested exception is com.tencent.polaris.api.exception.PolarisException: ERR-2100(UNKNOWN_SERVER_ERROR): at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.tencent.polaris.client.api.SDKContext]: Factory method 'polarisContext' threw exception; nested exception is com.tencent.polaris.api.exception.PolarisException: ERR-2100(UNKNOWN_SERVER_ERROR): at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) Caused by: com.tencent.polaris.api.exception.PolarisException: ERR-2100(UNKNOWN_SERVER_ERROR): at com.tencent.polaris.plugins.configuration.connector.localfile.LocalFileConfigFileConnector.init(LocalFileConfigFileConnector.java:107) at com.tencent.polaris.api.plugin.impl.PluginManager.initPlugins(PluginManager.java:80) at com.tencent.polaris.client.api.SDKContext.initContextByConfig(SDKContext.java:184) at com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration.polarisContext(PolarisContextAutoConfiguration.java:54) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)

To Reproduce 打包项目,发布到K8S Pod启动项目

Expected behavior 正常启动,不再抛异常

Environment

Additional context Add any other context about the problem here.

glacier-archit commented 4 months ago

目前,根据K8S启动pod抛出异常, 我们这边初步调试源码发现异常是如下代码抛出。 image

继续跟代码发现,polaris调用了JDK的WindowsWatchService的构造方法,并且在构造方法中调用了native方法CreateIoCompletionPort()启动一个端口号,推测是启动端口号抛出的异常。

image

CreateIoCompletionPort()代码如下 image

glacier-archit commented 4 months ago

问题已经解决