常用运维命令
1:jps
jps:列出所有正在运行的java进程,其中jps命令也是一个java程序,前面的数字就是对应的进程id
jps -l:输出应用程序main.class的完整package名或者应用程序jar文件完整路径名。
2:jmap
jmap [options] pid:options为jmap命令的可选参数。如果没有指定这个参数,jinfo命令会显示Java虚拟机进程的内存映像信息,如下:
option可选参数列表:
1:-heap:显示堆信息
2:-histo[:live]:显示Java堆中对象的统计信息,包括:对象数量、占用内存大小(单位:字节)和类的完全限定名(加上live表示活动的)
等等
3:线程数:
ps -mp:可以查看一个进程起的线程数
ps -mp pid | wc -l:线程数
top:
top -H:启动top,top一行显示一个线程。不加上H,它一行显示一个进程。
ps xH:所有存在的线程:
4:jstack:java堆栈跟踪工具,打印出给定的java进程ID、core file、远程调试服务的Java堆栈信息
-
jstack [ option ] pid
-
jstack [ option ] executable core
-
jstack [ option ] [server-id@]remote-hostname-or-IPoption
option参数说明:
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-m | 如果调用到本地方法的话,可以显示C/C++的堆栈 |
-l | 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 |
可以用来分析死锁CPU过高等等(未完待续--------------------------------------)
分析CPU过高步骤:
1:top:分析进程CPU占用情况:
2:top -Hp pid:查看进程下各线程占用情况
3:jstack pid:查看该线程的堆栈状态
4:jstack -l [PID] >/tmp/log.txt:将堆栈信息写入到文件
5:我们把占用cpu资源较高的线程pid转成16进制的值,在thread dump中,每个线程都有一个nid,我们找到对应的nid(就是16进制后的值),找找原因