我有一个嵌入了 Tomcat 8.5 的 Java 项目。我已将新服务添加到 sytemd 以将其作为 CentOS 7.2 中的服务运行。当我使用“systemctl start app.service”启动服务器时,程序将停止在
"Aug 16, 2018 5:54:13 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.5.32"
我使用“jstack”命令来检查该进程,然后得到以下信息:
2018-08-16 18:28:34 完整线程转储 Java HotSpot(TM) 64 位服务器 VM(25.152-b16 混合模式): “附加监听器”#14 守护进程 prio=9 os_prio=0 tid=0x00007fe804001000 nid=0x19a5 等待条件 [0x00000000000000000] java.lang.Thread.State:可运行 “localhost-startStop-1”#13 守护进程 prio=5 os_prio=0 tid=0x00007fe7e0001800 nid=0x190c 可运行 [0x00007fe8204a8000] java.lang.Thread.State:可运行 在 java.io.UnixFileSystem.getBooleanAttributes0(本机方法) 在 java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242) 在 java.io.File.isDirectory(File.java:849) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2011) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1963) 在 org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1913) 在 org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1153) 在 org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765) - 已锁定(org.apache.catalina.startup.ContextConfig) 在 org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299) 在 org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154) - 已锁定(org.apache.catalina.core.StandardContext) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - 已锁定(org.apache.catalina.core.StandardContext) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) “Tomcat-startStop-1”#12 守护进程 prio=5 os_prio=0 tid=0x00007fe8486d7000 nid=0x190b 等待条件 [0x00007fe8205ad000] java.lang.Thread.State:等待(停止) 在 sun.misc.Unsafe.park(本机方法) - 停车等待(java.util.concurrent.FutureTask) 在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) 在 java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429) 在 java.util.concurrent.FutureTask.get(FutureTask.java:191) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) - 已锁定(org.apache.catalina.core.StandardHost) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) - 已锁定(org.apache.catalina.core.StandardHost) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - 已锁定(org.apache.catalina.core.StandardHost) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) “NioBlockingSelector.BlockPoller-1”#11 守护进程 prio=5 os_prio=0 tid=0x00007fe8486c3800 nid=0x190a 可运行 [0x00007fe8206ae000] java.lang.Thread.State:可运行 在 sun.nio.ch.EPollArrayWrapper.epollWait(本机方法) 在 sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) 在 sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) 在 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - 已锁定(sun.nio.ch.Util$3) - 已锁定(java.util.Collections$UnmodifiableSet) - 锁定(sun.nio.ch.EPollSelectorImpl) 在 sun.nio.ch.SelectorImpl.select (SelectorImpl.java:97) 在 org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:298) “服务线程”#9 守护进程 prio=9 os_prio=0 tid=0x00007fe848102800 nid=0x1902 可运行 [0x00000000000000000] java.lang.Thread.State:可运行 “C1 CompilerThread2”#8 守护进程 prio=9 os_prio=0 tid=0x00007fe8480ff800 nid=0x1901 等待条件 [0x00000000000000000] java.lang.Thread.State:可运行 “C2 CompilerThread1”#7 守护进程 prio=9 os_prio=0 tid=0x00007fe8480fd800 nid=0x1900 等待条件 [0x00000000000000000] java.lang.Thread.State:可运行 “C2 CompilerThread0”#6 守护进程 prio=9 os_prio=0 tid=0x00007fe8480fb000 nid=0x18ff 等待条件 [0x00000000000000000] java.lang.Thread.State:可运行 “信号调度程序”#5 守护进程 prio=9 os_prio=0 tid=0x00007fe8480f9000 nid=0x18fe 可运行 [0x00000000000000000] java.lang.Thread.State:可运行 “代理锁定线程(并发 GC)”#4 守护进程 prio=9 os_prio=0 tid=0x00007fe8480f7800 nid=0x18fd 等待条件 [0x00000000000000000] java.lang.Thread.State:可运行 “Finalizer”#3 守护进程 prio=8 os_prio=0 tid=0x00007fe8480c4000 nid=0x18fc 在 Object.wait() 中 [0x00007fe821dfc000] java.lang.Thread.State:等待(在对象监视器上) 在 java.lang.Object.wait(本机方法) 在 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - 锁定(java.lang.ref.ReferenceQueue$Lock) 在 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) 在 java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) “引用处理程序” #2 守护进程 prio=10 os_prio=0 tid=0x00007fe8480bf800 nid=0x18fb 在 Object.wait() 中 [0x00007fe821efd000] java.lang.Thread.State:等待(在对象监视器上) 在 java.lang.Object.wait(本机方法) 在 java.lang.Object.wait(Object.java:502) 在 java.lang.ref.Reference.tryHandlePending(Reference.java:191) - 锁定(java.lang.ref.Reference$Lock) 在 java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) “main” #1 prio=5 os_prio=0 tid=0x00007fe84800b800 nid=0x18f4 等待条件 [0x00007fe8509c5000] java.lang.Thread.State:等待(停止) 在 sun.misc.Unsafe.park(本机方法) - 停车等待(java.util.concurrent.FutureTask) 在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) 在 java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429) 在 java.util.concurrent.FutureTask.get(FutureTask.java:191) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) - 已锁定(org.apache.catalina.core.StandardEngine) 在 org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) - 已锁定(org.apache.catalina.core.StandardEngine) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - 已锁定(org.apache.catalina.core.StandardEngine) 在 org.apache.catalina.core.StandardService.startInternal(StandardService.java:422) - 已锁定(org.apache.catalina.core.StandardEngine) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - 已锁定(org.apache.catalina.core.StandardService) 在 org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793) - 已锁定(java.lang.Object) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - 已锁定(org.apache.catalina.core.StandardServer) 在 org.apache.catalina.startup.Tomcat.start(Tomcat.java:367) 在app.test.server.HttpServer.startServer(HttpServer.java:107) 在 app.test.ServerBootstrap.main(ServerBootstrap.java:27) “VM 线程” os_prio=0 tid=0x00007fe8480b7800 nid=0x18fa 可运行 “Gang worker#0(并行 GC 线程)”os_prio = 0 tid = 0x00007fe84801c800 nid = 0x18f5 可运行 “Gang worker#1(并行 GC 线程)”os_prio = 0 tid = 0x00007fe84801e000 nid = 0x18f6 可运行 “Gang worker#2(并行 GC 线程)”os_prio = 0 tid = 0x00007fe848020000 nid = 0x18f7 可运行 “Gang worker#3(并行 GC 线程)”os_prio = 0 tid = 0x00007fe848022000 nid = 0x18f8 可运行 “并发标记 - 清除 GC 线程” os_prio=0 tid=0x00007fe848065000 nid=0x18f9 可运行 “VM 定期任务线程” os_prio=0 tid=0x00007fe848108000 nid=0x1903 等待条件 JNI 全局引用:64
我发现
- 锁定 <0x00000006cb0240e0>(org.apache.catalina.startup.ContextConfig)
我在“/etc/systemd/system”中的服务脚本是:
[单元] 描述=testapp 之后=网络.目标 [服务] 类型=分叉 ExecStart=/test/app/startup.sh [安装] WantedBy=多用户.目标
我的startup.sh脚本内容是:
/bin/sh #!/bin/sh 复制代码 LIB=/测试/应用程序/lib CONFIG_FILE_PATH = /测试/应用程序/配置 CP=.:$CLASSPATH 对于 ${LIB}/*.* 中的 f; 执行CP=${CP}:$f; 完毕 CP = $ {CP}:$ {CONFIG_FILE_PATH}; 导出 CLASSPATH=$CP nohup /usr/local/jdk1.7.0_80/bin/java -classpath $CLASSPATH app.test.ServerBootstrap ${CONFIG_FILE_PATH} >> test.out 2>&1 &
当我运行“startup.sh”脚本时,没有任何问题。当我使用“systemctl”命令时,程序将暂停,但进程将继续运行。
我该如何处理这个问题。运行 shell 脚本和“systemctl”命令之间有什么区别吗?