java - Maven 设置为忽略 `wsdl2java` 这是否会导致 Wildfly 在部署时出现高内存和慢启动?
问题描述
我正在开发https://github.com/CONNECT-Solution/CONNECT的(目前是私有的)分支
我观察到它至少Xmx=2g
需要启动,即便如此,它也需要 6-8GB 才能在任何合理的时间内启动。
我在启动过程中进行了堆转储,并在堆上观察了以下类,这JAXBContextImpl
似乎很重要:
当以低值运行时,Xmx
我Xmx=512m
会收到如下错误:
23:28:42,607 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (MSC service thread 1-2) Loading XML bean definitions from class path resource [CONNECT-context.xml]
23:31:05,802 WARN [org.springframework.web.context.support.XmlWebApplicationContext] (MSC service thread 1-3) Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AdapterMpiService': Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: Java heap space
23:31:05,824 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./Adapter/PatientDiscovery/A_0: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./Adapter/PatientDiscovery/A_0: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_191]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_191]
at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_191]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AdapterMpiService': Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: Java heap space
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.apache.cxf.transport.servlet.CXFServlet.createSpringContext(CXFServlet.java:151)
at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:74)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:77)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117)
at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:79)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103)
at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:220)
at io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:125)
at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:509)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:88)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
... 3 more
我认为正在发生的是应用程序在部署时生成 web 服务。我想在编译时生成那些。
我看到这wsdl2java
似乎在https://github.com/CONNECT-Solution/CONNECT/blob/CONNECT_integration/Product/Production/pom.xml被禁用:
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<versionRange>[2.6.0,)</versionRange>
<goals>
<goal>wsdl2java</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
我还在https://github.com/CONNECT-Solution/CONNECT/blob/CONNECT_integration/Product/Production/Common/Properties/pom.xml中看到cxf-codegen-plugin
跳过:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
问题:
- 启动时的缓慢和高内存使用是由 web 服务生成引起的吗?
- 是否会在部署时重新启用
wsdl2java
和/或cxf-codegen-plugin
提高速度或内存利用率? - 通过在编译时而不是部署时构建这些 Web 服务,我是否会将任何动态特性置于风险之中?
解决方案
推荐阅读
- r - 在 spatstat 中为 mppm 对象绘制包络
- c# - 无法加载 DLL 'SqlServerSpatial110.dll':找不到指定的模块
- ios - 编辑操作在 Core Data 中不起作用
- java - 为什么 Java 11 在 Android Studio 中会出现 TaskExecutionException?
- sql-server - 通过消除除 seacrhed 行之外的所有其他行,通过文本框在已填充的列表视图中搜索
- node.js - 在 Sails.js 中无法访问节点包
- reactjs - 如何在 toast ui 日历上自定义时间间隔
- javascript - 如何使用 Sequelize 中的 where 子句比较多个日期?
- flutter - Flutter 需要 SDK 版本,但版本安装正确
- visual-studio-code - VS Code - 在文本编辑器中更改特定单词的文本颜色