tomcat程序启动异常[main] org.apache.catalina.startup.Catalina.start Server startup in [4230] milliseconds

在新环境的tomcat上部署程序时发现程序启动异常,访问404,启动日志卡住没有下文了,如下:

这个问题困扰了一整天,最后终于解决了,下面是一系列的排查流程以及解决方案供大家参考:

通过网络资料查询到一些解决方案:

解决方案一:

找到jdk1.x.x_xx/jre/lib/security/Java.security文件,在文件中找到securerandom.source这个设置项,将其改为:

securerandom.source=file:/dev/./urandom。

 此办法对我不生效,so解决方案二:

因考虑是否是内存不足导致程序无法正常启动,在启动命令中去掉与内存相关的命令,如:

--server -Xms1024m -Xmx1024m

如果在catalina.bat文件中设置了内存机制, 如:set JAVA_OPTS=-server -Xms1024m -Xmx1024m   ,用rem  注释掉,或删除 。

另外这种情况还有可能时数据库初始化失败导致的,查看数据库连接是否正常,数据库配置是否有误:由于我数据库账密做过加密处理,所以我服务器上配置的密码容易出错,果然再次加密后和现在的配置不一样,修改后重启。

重启后惊呆了,一顿操作和没修改前一样的,没有一点效果。。。也许我还有其他问题需要处理,再次观察启动日志:

从这三行可以发现一个或多个监听启动失败,服务程序启动失败,但没有详细原因,到服务目录里的log4j中查看日志:

很明显的一个报错信息,在服务器找不到ifconfig命令导致程序失败,回到服务器安装ifconfig

sudo apt install net-tools

安装完成后再次启动,又出现一个新的报错Caused by: java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY。。。简直是困难重重

Caused by: java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY
        at org.apache.logging.log4j.core.config.ConfigurationSource.<clinit>(ConfigurationSource.java:56)
        at org.apache.logging.log4j.core.config.NullConfiguration.<init>(NullConfiguration.java:32)
        at org.apache.logging.log4j.core.LoggerContext.<clinit>(LoggerContext.java:85)
        at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:254)
        at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:218)
        at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:140)
        at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:123)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:230)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:648)
        at net.bull.javamelody.internal.common.Log4J2Logger.<clinit>(Log4J2Logger.java:30)
        at net.bull.javamelody.internal.common.LOG.getJavaMelodyLogger(LOG.java:183)
        at net.bull.javamelody.internal.common.LOG.<clinit>(LOG.java:42)
        at net.bull.javamelody.MonitoringSpringInterceptor.<init>(MonitoringSpringInterceptor.java:54)
        at net.bull.javamelody.MonitoringSpringAdvisor.<init>(MonitoringSpringAdvisor.java:36)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
        ... 67 more

这个错误来源于log4j,出现该问题的原因是:

Apache Log4j2出现了“核弹级”漏洞,其中针对jdk8以上的修复方案常见为,将log4j-core升级为2.15.0版本; 升级后应用出现:java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY报错。

有可能是版本过低需要升级导致(网络查阅升级到log4j-api-2.12.4.jar、log4j-core-2.17.4.jar即可解决),还有可能是jar包冲突导致,需确认有没有不同版本的同一个jar包。

 查看我的服务lib目录下有两个版本的jar包

删除掉log4j-api-2.12.0.jar、log4j-core-2.17.0.jar,再次重启,程序正常启动,请求不在404,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值