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进程未正常退出相关推荐

  1. vmx进程已提前退出_如何优雅地停止Java进程

    目录 理解停止Java进程的本质 应该如何正确地停止Java进程如何注册关闭钩子使用关闭钩子的注意事项信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境,即: ...

  2. 面试官:哪些原因会导致JAVA进程退出?

    面试官:哪些原因会导致JAVA进程退出? 无外乎三种情况. linux的OOM killer杀死 JVM自身故障 jvm的OOM导致进程退出(很罕见,我至今没遇见过) 引言 linux的OOM kil ...

  3. .NET 6 “目标进程已退出,但未引发 CoreCLR 启动事件。请确保将目标进程配置为使用 .NET Core。如果目标进程未运行 .NET Core,则发生这种情况并不意外。”

    Mac M1 在 .NET 6 上调试.NET 5 的Web应用程序出现程序闪退问题 首先看了下本地 .NET 的环境 ➜ ~ dotnet --list-sdks 6.0.200 [/usr/loc ...

  4. sdk缺失”目标进程已退出,但未引发 CoreCLR 启动事件。请确保将目标进程配置为使用 .NET Core。如果目标进程未运行 .NET Core,则发生这种情况并不意外。 程序“[16780]

    问题:项目运行后出现"目标进程已退出,但未引发 CoreCLR 启动事件.请确保将目标进程配置为使用 .NET Core.如果目标进程未运行 .NET Core,则发生这种情况并不意外. 程 ...

  5. 你如何在java中获取线程堆_如何在Windows上获取未在控制台中运行的Java进程的线程和堆转储...

    问题 我有一个Java应用程序,我从控制台运行,然后控制台执行另一个Java进程.我想获得该子进程的线程/堆转储. 在Unix上,我可以做akill -3 但是在Windows AFAIK上获取线程转 ...

  6. python使用xlwings合并excel踩坑(格式、copy、进程未退出等问题)

    问题总览 安装使用xlwings.pyinstaller.pip升级 文件格式混合处理问题(xls.xlsx) 跨工作簿copy报错 xlwings的两种copy方法 退出后,wps进程未关闭 exc ...

  7. 如何优雅地停止Java进程

    目录 理解停止Java进程的本质 应该如何正确地停止Java进程 如何注册关闭钩子 使用关闭钩子的注意事项 信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境 ...

  8. Java 进程的退出机制与Shutdown hook

    基本概念 进程与线程:一个进程包含多个线程,一个进程中所有线程都退出后,该进程才会退出. 用户线程与守护线程:任一用户线程未退出,JVM进程不退出,当所有用户线程都退出时, 守护线程线程自动退出. S ...

  9. 为什么Java进程使用的RAM比Heap Size大?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 阿杜的世界 来源 | 公众号「javaadu」 Java进程使用的虚拟内存确实比J ...

最新文章

  1. ssh远程执行多个命令
  2. python echo函数_python如何调用php文件中的函数详解
  3. Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍
  4. phpexcel.php实际应用,PHP操作excel的一个例子(原创)-PHP教程,PHP应用
  5. varchar2(100 char)是什么意思
  6. 讨论记录:求大于一个时间段的最大平均积分,O(n)时间实现
  7. linux重启mysql不动了,[转载]LINUX启动/重启/停上MYSQL的命令
  8. js apply/call/caller/callee/bind使用方法与区别分析
  9. TensorFlow发布语音识别入门教程,附1GB数据集代码
  10. .Net下采用Base64编码的一个封装好的类库
  11. 2019深圳杯获奖论文_我校研究生喜获2019年“深圳杯”数学建模挑战赛决赛三等奖...
  12. 使用ps处理PDF文件
  13. python常用颜色表示_Python命令行的常用颜色,python,字体
  14. SUCCEEDED 和 FAILED的作用和用法
  15. C语言 整数形式输出
  16. HDFS BALANCER
  17. Netbeans 7.1 add android plugin
  18.  php怎么做注册短信验证码
  19. 各地政府开放平台_8个视频让您对开放政府感到兴奋
  20. vue导入处理Excel表格详解

热门文章

  1. X3650M3 客户端联不上加密狗!
  2. CCNA10月27日战报
  3. Ubuntu操作系统安装之开发人员必备
  4. 【超链接】ToMyStudy
  5. 各种排序算法思想小结
  6. 网页中添加QQ,msn留言按钮
  7. asp自定义函数可以返回数组或者对象
  8. Redis的应用场景及优缺点
  9. scrapyd部署爬虫项目到LINUX服务器
  10. Java Pinyin4j(汉字转拼音)