java进程未正常退出
2019独角兽企业重金招聘Python工程师标准>>>
背景:
通过shell脚本定时启动的java进程一直都没有退出
#0 */2 * * * /shell/command.sh
echo $@
now=$(date "+%Y-%m-%d_%H-%M-%S")
setsid java -Xms2G -Xmx2G -Djava.ext.dirs=/lib -Dlog4j.configuration=file:/conf/log4j.xml com.ZMain arg1 arg2 > /log/out.$now 2>&1 &
分析:
通过jstack dump出线程列表
2017-01-06 09:43:12
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.71-b15 mixed mode):"elasticsearch[Boomerang][generic][T#189]" #546 daemon prio=5 os_prio=0 tid=0x00007f085c003800 nid=0x68a8 waiting on condition [0x00007f08edee3000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x000000008000c9f8> (a java.util.concurrent.SynchronousQueue$TransferStack)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- None"elasticsearch[Slick][generic][T#201]" #505 daemon prio=5 os_prio=0 tid=0x00007f08a8003000 nid=0x17a6 waiting on condition [0x00007f08eedec000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x000000008020fb80> (a java.util.concurrent.SynchronousQueue$TransferStack)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- None"Attach Listener" #504 daemon prio=9 os_prio=0 tid=0x00007f08c8001000 nid=0x1342 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"DestroyJavaVM" #162 prio=5 os_prio=0 tid=0x00007f09240bf800 nid=0x1422 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"pool-8-thread-10" #159 prio=5 os_prio=0 tid=0x00007f0924ad2800 nid=0x21ac waiting on condition [0x00007f08ee4e9000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x000000008eae3710> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- None"pool-8-thread-9" #158 prio=5 os_prio=0 tid=0x00007f0924ad2000 nid=0x21a2 waiting on condition [0x00007f08ed8df000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x000000008eae3710> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- None"pool-8-thread-6" #155 prio=5 os_prio=0 tid=0x00007f09240c5000 nid=0x219b waiting on condition [0x00007f08edde2000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x000000008eae3710> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- None"pool-8-thread-5" #154 prio=5 os_prio=0 tid=0x00007f09255fb000 nid=0x2198 waiting on condition [0x00007f08ed7de000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x000000008eae3710> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- None"pool-8-thread-4" #153 prio=5 os_prio=0 tid=0x00007f0924a1b000 nid=0x2197 waiting on condition [0x00007f08edfe4000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for <0x000000008eae3710> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- None"elasticsearch[Boomerang][transport_client_boss][T#1]{New I/O boss #34}" #51 daemon prio=5 os_prio=0 tid=0x00007f0925428000 nid=0x14d7 runnable [0x00007f08eefee000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked <0x000000008000cf70> (a sun.nio.ch.Util$2)- locked <0x000000008000cf60> (a java.util.Collections$UnmodifiableSet)- locked <0x000000008000cf18> (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at org.jboss.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:68)at org.jboss.netty.channel.socket.nio.AbstractNioSelector.select(AbstractNioSelector.java:434)at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:212)at org.jboss.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42)at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- <0x000000008000d170> (a java.util.concurrent.ThreadPoolExecutor$Worker)"elasticsearch[Boomerang][transport_client_worker][T#16]{New I/O worker #33}" #49 daemon prio=5 os_prio=0 tid=0x00007f09253fd000 nid=0x14d6 runnable [0x00007f08ef0ef000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked <0x00000000800149c0> (a sun.nio.ch.Util$2)- locked <0x00000000800149b0> (a java.util.Collections$UnmodifiableSet)- locked <0x0000000080014968> (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at org.jboss.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:68)at org.jboss.netty.channel.socket.nio.AbstractNioSelector.select(AbstractNioSelector.java:434)at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:212)at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Locked ownable synchronizers:- <0x0000000080014ab8> (a java.util.concurrent.ThreadPoolExecutor$Worker)
发现其中有线程是waiting状态,而且根据上下文显示,是在ThreadPoolExecutor$Worker.run中产生的.
发现SelectorImpl.lockAndDoSelect,是在NIO中出现的锁,不见的是死锁,如果是死锁的话,在jvisualvm中就会有提示了
结论:
ThreadPoolExecutor这个类是java的线程池.如果最终没有关闭连接池,会导致程序不退出.
增加异常捕获并且保证线程池能够关闭
转载于:https://my.oschina.net/cnarthurs/blog/820051
java进程未正常退出相关推荐
- vmx进程已提前退出_如何优雅地停止Java进程
目录 理解停止Java进程的本质 应该如何正确地停止Java进程如何注册关闭钩子使用关闭钩子的注意事项信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境,即: ...
- 面试官:哪些原因会导致JAVA进程退出?
面试官:哪些原因会导致JAVA进程退出? 无外乎三种情况. linux的OOM killer杀死 JVM自身故障 jvm的OOM导致进程退出(很罕见,我至今没遇见过) 引言 linux的OOM kil ...
- .NET 6 “目标进程已退出,但未引发 CoreCLR 启动事件。请确保将目标进程配置为使用 .NET Core。如果目标进程未运行 .NET Core,则发生这种情况并不意外。”
Mac M1 在 .NET 6 上调试.NET 5 的Web应用程序出现程序闪退问题 首先看了下本地 .NET 的环境 ➜ ~ dotnet --list-sdks 6.0.200 [/usr/loc ...
- sdk缺失”目标进程已退出,但未引发 CoreCLR 启动事件。请确保将目标进程配置为使用 .NET Core。如果目标进程未运行 .NET Core,则发生这种情况并不意外。 程序“[16780]
问题:项目运行后出现"目标进程已退出,但未引发 CoreCLR 启动事件.请确保将目标进程配置为使用 .NET Core.如果目标进程未运行 .NET Core,则发生这种情况并不意外. 程 ...
- 你如何在java中获取线程堆_如何在Windows上获取未在控制台中运行的Java进程的线程和堆转储...
问题 我有一个Java应用程序,我从控制台运行,然后控制台执行另一个Java进程.我想获得该子进程的线程/堆转储. 在Unix上,我可以做akill -3 但是在Windows AFAIK上获取线程转 ...
- python使用xlwings合并excel踩坑(格式、copy、进程未退出等问题)
问题总览 安装使用xlwings.pyinstaller.pip升级 文件格式混合处理问题(xls.xlsx) 跨工作簿copy报错 xlwings的两种copy方法 退出后,wps进程未关闭 exc ...
- 如何优雅地停止Java进程
目录 理解停止Java进程的本质 应该如何正确地停止Java进程 如何注册关闭钩子 使用关闭钩子的注意事项 信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境 ...
- Java 进程的退出机制与Shutdown hook
基本概念 进程与线程:一个进程包含多个线程,一个进程中所有线程都退出后,该进程才会退出. 用户线程与守护线程:任一用户线程未退出,JVM进程不退出,当所有用户线程都退出时, 守护线程线程自动退出. S ...
- 为什么Java进程使用的RAM比Heap Size大?
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 阿杜的世界 来源 | 公众号「javaadu」 Java进程使用的虚拟内存确实比J ...
最新文章
- ssh远程执行多个命令
- python echo函数_python如何调用php文件中的函数详解
- Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍
- phpexcel.php实际应用,PHP操作excel的一个例子(原创)-PHP教程,PHP应用
- varchar2(100 char)是什么意思
- 讨论记录:求大于一个时间段的最大平均积分,O(n)时间实现
- linux重启mysql不动了,[转载]LINUX启动/重启/停上MYSQL的命令
- js apply/call/caller/callee/bind使用方法与区别分析
- TensorFlow发布语音识别入门教程,附1GB数据集代码
- .Net下采用Base64编码的一个封装好的类库
- 2019深圳杯获奖论文_我校研究生喜获2019年“深圳杯”数学建模挑战赛决赛三等奖...
- 使用ps处理PDF文件
- python常用颜色表示_Python命令行的常用颜色,python,字体
- SUCCEEDED 和 FAILED的作用和用法
- C语言 整数形式输出
- HDFS BALANCER
- Netbeans 7.1 add android plugin
- php怎么做注册短信验证码
- 各地政府开放平台_8个视频让您对开放政府感到兴奋
- vue导入处理Excel表格详解