如何优雅地停止Java进程】的更多相关文章

目录 理解停止Java进程的本质 应该如何正确地停止Java进程 如何注册关闭钩子 使用关闭钩子的注意事项 信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境,即:JVM,启动Java进程即启动了一个JVM. 因此,所谓停止Java进程,本质上就是关闭JVM. 那么,哪些情况会导致JVM关闭呢? 应该如何正确地停止Java进程 通常来讲,停止一个进程只需要杀死进程即可. 但是,在某些情况下可能需要在JVM关闭之前执行一些数据保存或者资源释放的工作,此时就…
资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux系统下如何kill掉一个后台Java进程,相信童鞋们都知道如何操作.首先使用ps命令查找该Java进程的进程ID,然后使用kill命令进行杀掉.命令如下: (1)ps查进程ID [user@data2 ~]$ ps -ef | grep Test user 2095020809 0 21:30 pt…
使用shell脚本停止java进程,过程就是先查出对应的java进程pid,然后kill掉 - | 其中xxx是对应进程的关键词(即从查出的所有java进程中分辨出目标进程)…
本案例以 xxx.jar    为列子 我们一般启动的jar 在任务管理器中查看进程都是javaw.exe ,无法用命令来 kill,所以我们得给自己的java 进程设置个新 title 1:  首先将C:\Program Files\Java\jdk1.8.0_45\bin目录下的javaw.exe文件复制一份重命名为你需要运行的jar的标签.exe  如“balabala.exe” 然后将其放回C:\Program Files\Java\jdk1.8.0_45\bin 下. 2..写个启动脚…
在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killall 直接杀掉某一进程名称包含的所有运行中进程(我们可能只需要杀掉其中的某一类或运行指定参数命令的进程),这个时候我们需要运用ps, grep, cut 和 kill 一起操作. ok,下面给出具体的参考:ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9运行这条命令将会杀掉所有含有…
linux下如何批量杀JAVA进程或某个进程方法 在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killall 直接杀掉某一进程名称包含的所有运行中进程(我们可能只需要杀掉其中的某一类或运行指定参数命令的进程),这个时候我们需要运用ps, grep, cut 和 kill 一起操作. ok,下面给出具体的参考: ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|x…
Java中可以添加ShutdownHook监听关闭事件,包括kill -15, control+c,terminal等信号.kill -9则接收不到. Runtime.getRuntime().addShutdownHook(new ShutdownThread()); 如果java运行在容器中,stop docker容器时,容器内的java进程不一定能接收到kill事件. 原因主要是:dockerfile中 ENTRYPOINT 我们经常运行的脚本,在脚本中设置好java启动参数,再java…
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This output file may be truncated or incomplete. # # Out of Memory Error (os_linux.cpp:2673), pid=28610, tid=139813184919296  日志分析原因很简单,服务器的内存不够用,导致进程崩溃 JA…
原文地址:http://stackoverflow.com/questions/28739600/jvm-hang-and-kill-3-jmap-failed tomcat进程出现了如下异常,并且卡在这个状态几天时间了: 所有线程都停止, 有一些连接停留在 SYNC_RECV 状态 kill -3 没有输出线程栈 jmap 和 jstack 无法正常工作 sudo -u tomcat /usr/java/jdk1.6.0_45/bin/jmap -heap 19938 Attaching to…
今天遇到一个非常奇怪的问题,如标题所看到的: linux下(之所以强调linux下,是由于在windows下正常),运行tomcat ./shutdown.sh 后,尽管tomcat服务不能正常訪问了,可是ps -ef | grep java 后,发现tomcat相应的java进程未随web容器关闭而销毁,进而存在僵尸java进程. 刚開始百思不得其解,google下,发现存在一种说法是:有非守护线程(即User Thread)存在,jvm不会退出(当JVM中全部的线程都是守护线程的时候,JVM…
================================ 详解:https://blog.csdn.net/achenyuan/article/details/77867661 ================================ 使用命令 top 统计信息区前五行是系统的统计信息,每一行代表了不同的数据内容. 第一行是任务队列信息,跟 uptime 命令的执行结果一样,说明如下: 17:01:28 系统当前时间up 95 days,4:53 系统的运行时间:95天4个小时5…
摘自: http://www.myexception.cn/internet/2044496.html 分析java进程假死情况 1 引言 1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响应,查看服务器端tomcat的进程是存活的,查看业务日志的时候发…
转自:http://blog.csdn.net/jadyer/article/details/7960802 资料参考来源自兔大侠,并略作修改:http://www.tudaxia.com/archives/10,在此鸣谢!! #!/bin/sh #------------------------------------------------------------------------------------------------------------- #实际使用中,需注意以下两点…
之前我们讲解 Nginx 命令行的时候,可以看到 Nginx 停止有两种方式,分别是 nginx -s quit 和 nginx -s stop,其中 stop 是指立即停止 Nginx,而 quit 是指优雅的关闭 Nginx,对应的信号也是同样的,还有我们之前提到的 reload 和热升级这样的过程中都涉及到了优雅的停止 Nginx. 那所谓的优雅的停止 Nginx 究竟是怎样一个过程呢,接下来让我一起来学习下吧. 何为优雅的关闭? 所谓的优雅的关闭,是针对 worker 进程而言的,因为只…
在本地调试agent相关功能,需要经常性的杀掉Java进程,验证一些极端情况. 每次都是本能执行如下步骤 jps kill -9 <pid> reboot 有一次验证,发现代码中添加的ShutdownHook没有生效,难道和kill命令后面的数字有关? 经过一番查阅,后面的数字代表的是具体信号,kill命令可将指定的信号发送给相应的进程,linux中常见的信号如下: 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGGQUIT 停止进程 9 SIGKILL 无条件终止进程 15…
目录 1.引言 2. 程序启停, 为进程自定义项目名称 3. 操作系统判断 4. 获取进程信息 5. 内存,CPU信息 6. 堆内存信息 7. 端口信息 8. 线程信息 9. MXBean使用样例 9.1 根据pid获取jvm对象 9.2 根据jvm对象获取jmx服务 9.3. 使用MXBean代理获取具体管理工具 9.4 访问MXBean demo 9.6 demo  最近项目需要对Java进程,堆栈信息,内存,cpu等资源的消耗进行监控,借鉴了git已有的轮子JPOM java项目管理系统和…
1. 介绍 Docker的大部分重点是在隔离的容器中打包和运行应用程序的过程.有无数的教程说明了如何在Docker容器中运行应用程序,但是很少有教程讨论如何正确停止容器化的应用程序.这似乎是一个愚蠢的话题-谁在乎您如何停止容器? 嗯,根据您的应用程序,停止应用程序的过程可能非常重要.如果您的应用程序正在处理HTTP请求,则可能需要先完成所有未完成的请求,然后再关闭容器.如果您的应用程序写入文件,则可能要确保在退出容器之前正确刷新数据并关闭文件. 如果您只是启动一个容器并永久运行,事情将会很容易,…
关闭nginx两种方式 nginx -s stop  立即停止nginx进程  nginx -s quit 优雅地关闭worker进程 开始优雅的关闭worker进程后 01设置定时器 worker_shutdown__timeout 设置多少秒后关闭连接 02关闭监听句柄,不在接收新的连接 03关闭空闲连接,nginx为了保证连接的快速可靠,会保持一些空闲连接. 04在循环中等待全部连接关闭, 两种情况,一种循环的等待nginx连接关闭了,另一种超过了worker__shutdown__tim…
tag: java 诊断 堆栈 在线调试 耗时 死锁 arthas 阿里巴巴 Arthas (阿尔萨斯) Arthas 是 Alibaba 开源的Java诊断工具,深受开发者喜爱. 官网文档:https://arthas.aliyun.com/doc/ 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道…
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] args) { System.out.println("sleep .."); try { Thread.sleep(10000000); } catch (InterruptedException e) { e.printStackTrace(); } } }   java -Xmx10…
今天登陆同事的一台gateway 开始以为hive环境登陆不了了,仔细一看看了下是因为机器很卡,我每次等几秒没登陆就ctrl+c了,看了下是有个java进程cpu:340.4%  mem:14.6% 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top 一下 可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138 2. 找出消耗资源最高的线程 top -H -p  29580 …
Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running…
一.背景: Linux后台运行了多个Java程序,进程名都是java. 执行pkill java会一次性杀掉所有的java进程. 二.解决思路: 先通过一定的检索条件,定位出指定的java进程 然后解析该字符串得出该进程的pid 执行kill命令杀掉这个进程 三.解决办法: 使用管道符"|"来串联思路的操作. 以tomcat进程为例,检索词tomcat. 方法一 ps -ef|grep tomcat|grep -v grep|cut -c -|xargs kill - 方法二 ps x…
java进程load过高分析步骤: top 查看java进程情况     top -Hp 查看某个进程的具体线程情况   printf 0x%x 确认哪一个线程占用cpu比较多,拿出来转成16进制   jstack > jstack.log 注:jstack命令必须由当前运行的java进程用户执行,否则会出现“12377: Operation not permitted”错误 最后: 在jstack.log  中查询相关线程的信息…
一,在centos linux 上查看进程占用cpu过高 top  shift+h 查看哪个进程程消耗最高     二,查看JAVA进程中哪个线程消耗最高   2.1 导出java运行的线程信息   jstack 进程id(jps查看) jstack 进程id > ps.txt jstack -l 进程id (窗口打印)     //另外还有一种方式   如果启动方式如下: nohup java -classpath conf/:my.jar com.tank.manClass>./log.o…
原理:JDK的nio包中FileLock实现类似Linux fcntl的文件锁, 可使文件被进程互斥访问.  借助此功能, 可以实现强大的Java进程互斥锁, 从而在应用层面保证同一时间只有惟一的Jar应用进程在运行! 避免某些因素导致jar重复执行, 多个进程产生竞争,破坏业务数据. (当然, 你可以借助类似ubuntu的upstart脚本或者ps -p <pid>之类的做法来做到相同的功能).实现: package test; import java.io.File; import jav…
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况. 2,程序代码有问题,出现死循环,可能性极大. 问题解决: 1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出. 2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,…
问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况.2,程序代码有问题,出现死循环,可能性极大. 问题解决:1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出.2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下…
原文:https://github.com/oldratlee/useful-shells useful-shells 把平时有用的手动操作做成脚本,这样可以便捷的使用. show-busy-java-threads.sh 在排查Java的CPU性能问题时,找出Java进程中消耗CPU多(top us值过高)的线程,查看它的线程栈,从而找出有性能问题的方法调用. $ ./show-busy-java-threads.sh The stack of busy(57.0%) thread(23355…
Java进程CPU使用率高排查 生产java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下.1.jps 获取Java进程的PID.2.jstack pid >> java.txt 导出CPU占用高进程的线程栈.3.top -H -p PID 查看对应进程的哪个线程占用CPU过高.4.echo "obase=16; PID" | bc 将线程的PID转换为16进制.5.在第二步导出的Java.txt中查找转换成为16进制的线程PID.找到对应的线…