centos6内jdk8启动tomcat失败org.apache.tomcat.util.digester.Digester.startElement Begin event threw error

写这篇文章时是 2023-02-07,先说环境:

  • JDK1.8.0_361
  • Tomcat8.5.85
  • Centos6

JDK和Tomcat都是下载的最新的(修订号),恰恰是因为这个原因导致启动失败,堆栈如下:

07-Feb-2023 22:40:18.345 严重 [main] org.apache.tomcat.util.digester.Digester.startElement Begin event threw error
	java.lang.InternalError: java.lang.reflect.InvocationTargetException
		at jdk.internal.platform.Metrics.systemMetrics(Metrics.java:67)
		at jdk.internal.platform.Container.metrics(Container.java:42)
		at sun.management.OperatingSystemImpl.<init>(OperatingSystemImpl.java:181)
		at sun.management.ManagementFactoryHelper.getOperatingSystemMXBean(ManagementFactoryHelper.java:106)
		at java.lang.management.PlatformComponent$7.getMXBeans(PlatformComponent.java:157)
		at java.lang.management.PlatformComponent.getMXBeans(PlatformComponent.java:377)
		at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:472)
		at org.apache.tomcat.util.modeler.Registry.getMBeanServer(Registry.java:449)
		at org.apache.catalina.mbeans.MBeanUtils.createServer(MBeanUtils.java:581)
		at org.apache.catalina.mbeans.MBeanUtils.<clinit>(MBeanUtils.java:77)
		at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.<clinit>(GlobalResourcesLifecycleListener.java:68)
		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.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:115)
		at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1235)
		at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:510)
		at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183)
		at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1341)
		at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
		at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
		at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:507)
		at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:867)
		at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:796)
		at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:142)
		at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
		at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:644)
		at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1496)
		at org.apache.catalina.startup.Catalina.load(Catalina.java:618)
		at org.apache.catalina.startup.Catalina.load(Catalina.java:669)
		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.apache.catalina.startup.Bootstrap.load(Bootstrap.java:307)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:477)
	Caused by: java.lang.reflect.InvocationTargetException
		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 jdk.internal.platform.Metrics.systemMetrics(Metrics.java:63)
		... 36 more
	Caused by: java.lang.ExceptionInInitializerError
		at jdk.internal.platform.CgroupSubsystemFactory.create(CgroupSubsystemFactory.java:95)
		at jdk.internal.platform.CgroupMetrics.getInstance(CgroupMetrics.java:169)
		... 41 more
	Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
		at jdk.internal.platform.cgroupv2.CgroupV2Subsystem.initSubsystem(CgroupV2Subsystem.java:73)
		at jdk.internal.platform.cgroupv2.CgroupV2Subsystem.<clinit>(CgroupV2Subsystem.java:44)
		... 43 more
Exception in thread "main" java.lang.InternalError: java.lang.reflect.InvocationTargetException
	at jdk.internal.platform.Metrics.systemMetrics(Metrics.java:67)
	at jdk.internal.platform.Container.metrics(Container.java:42)
	at sun.management.OperatingSystemImpl.<init>(OperatingSystemImpl.java:181)
	at sun.management.ManagementFactoryHelper.getOperatingSystemMXBean(ManagementFactoryHelper.java:106)
	at java.lang.management.PlatformComponent$7.getMXBeans(PlatformComponent.java:157)
	at java.lang.management.PlatformComponent.getMXBeans(PlatformComponent.java:377)
	at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:472)
	at org.apache.tomcat.util.modeler.Registry.getMBeanServer(Registry.java:449)
	at org.apache.catalina.mbeans.MBeanUtils.createServer(MBeanUtils.java:581)
	at org.apache.catalina.mbeans.MBeanUtils.<clinit>(MBeanUtils.java:77)
	at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.<clinit>(GlobalResourcesLifecycleListener.java:68)
	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.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:115)
	at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1235)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:510)
	at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1341)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:507)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:867)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:796)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:142)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:644)
	at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1496)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:618)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:669)
	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.apache.catalina.startup.Bootstrap.load(Bootstrap.java:307)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:477)
Caused by: java.lang.reflect.InvocationTargetException
	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 jdk.internal.platform.Metrics.systemMetrics(Metrics.java:63)
	... 36 more
Caused by: java.lang.ExceptionInInitializerError
	at jdk.internal.platform.CgroupSubsystemFactory.create(CgroupSubsystemFactory.java:95)
	at jdk.internal.platform.CgroupMetrics.getInstance(CgroupMetrics.java:169)
	... 41 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
	at jdk.internal.platform.cgroupv2.CgroupV2Subsystem.initSubsystem(CgroupV2Subsystem.java:73)
	at jdk.internal.platform.cgroupv2.CgroupV2Subsystem.<clinit>(CgroupV2Subsystem.java:44)
	... 43 more

错误的原因是JDK使用cgroupv2来调用资源限制功能,但Linux内核4.5才支持cgroupv2,导致了错误的发生。
我感觉这是jdk的bug,没有正确的判断出系统使用的是cgroupv1还是cgroupv2

jdk换成1.8.0_351就好了,不一定是这个版本,去到jdk.internal.platform.Metrics里面使用的是cgroupv1就可以用

    static Metrics systemMetrics() {
        try {
            Class var0 = Class.forName("jdk.internal.platform.cgroupv1.Metrics");
            Method var1 = var0.getMethod("getInstance");
            return (Metrics)var1.invoke((Object)null);
        } catch (ClassNotFoundException var2) {
            return null;
        } catch (ReflectiveOperationException var3) {
            throw new InternalError(var3);
        }
    }
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值