目录
一、相关命令
二、具体使用
1.top
介绍
命令功能
命令格式
2.jstack
介绍
命令格式
和jmap的区别
jstack(查看线程)、jmap(查看内存)和jstat(性能分析)
类似命令kill -3 pid
3.jps
介绍
命令格式
jps -v 示例
4.jmap
介绍
命令格式
示例
5.kill -3 pid
介绍
命令格式
示例
其他
top、jstack、jps、jmap(arthas用heapdump来替代)、 kill -3 pid、thead dump、jinfo
top -p 8379(进程id) -H
或者
top -Hp pid
arthas的dashboard相当于综合了top、top -Hp pid和xx命令的组合
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
说明:top命令用来显示执行中的程序进程,使用权限是所有用户。按q键退出
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
top [参数]
格式:top [-] [d delay] [q] [c] [S] [s] [i] [n]
主要参数:
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出top。
-h | -v: 显示帮助或者版本信息】
** -c:** 命令行列显示程序名以及参数
-d: 启动时设置刷新时间间隔
-H: 设置线程模式
-i: 只显示活跃进程
-n: 显示指定数量的进程
-p: 显示指定PID的进程
-u: 显示指定用户的进程
top命令每个字段的详细解释如下:
cpu使用率彪高以及top命令详解_top命令的cpu占用率怎么算的_你的小伙伴啊的博客-CSDN博客
- jstack命令用于打印指定Java进程、核心文件或远程调试服务器的Java线程的Java堆栈跟踪信息[1]。
- jstack命令可以生成JVM当前时刻的线程快照。线程快照是当前JVM内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
- 当指定的进程在64位Java虚拟机上运行时,可能需要指定-J-d64选项,例如:jstack -J-d64 -m pid。
- 该命令可能在未来的版本中不可用!!!
jstack pid
jstack(查看线程)、jmap(查看内存)和jstat(性能分析)
两个工具的区别在于jstack是用于调试线程间的关系,解决阻塞,锁,cpu飙高等问题
而jmap用于输出对象,适用于解决对象内存溢出等问题。
kill -3 PID和jstack得到的结果类似。
当linux服务器出现异常情况(响应缓慢,负载持续飙升)并且服务器没有安装对应的包而无法使用jstack等命令时,可以使用linux的kill相关命令打印堆栈信息。
命令格式:kill -3 PID
kill -3 PID命令只能打印那一瞬间java进程的堆栈信息,适合在服务器响应慢,cpu、内存快速飙升等异常情况下使用,可以方便地定位到导致异常发生的java类,解决如死锁、连接超时等原因导致的系统异常问题。该命令不会杀死进程。
jps(Java Virtual Machine Process Status Tool)
是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前java进程的一些简单情况。
很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程以及进程id。
jps 也是一样,它的作用是显示当前系统的java进程情况及进程id。
我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例)
并可通过opt来查看这些进程的详细启动参数。
jps [options ] [ hostidh3 ]
[options]选项 :
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
java -jar 带jvm参数启动如下:
java -Xmx512m -jar xxx.jar
如果要加入spring的参数应该追加在xxx.jar后面:
java -Xmx512m -jar paotui-coupon-exec.jar --spring.profiles.active=test
jps -v示例如下:
1.带jvm参数启动:
jps -v:如下,看到了jvm参数
arthas用heapdump来替代
jmap(Java Virtual Machine Memory Map)是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具。除此以外,jmap命令还可以查看finalize执行队列、Java堆和方法区的详细信息,比如空间使用率、当前使用的什么垃圾回收器、分代情况等等。
命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列
jmap [options] pid
jmap -dump:live,format=b,file=/root/xhw/arthas/data/java-heap-dump.hprof 23985
已输出dump文件如下:
kill -3 PID和jstack得到的结果类似,都是查看当前进程/线程的情况。
当linux服务器出现异常情况(响应缓慢,负载持续飙升)并且服务器没有安装对应的包而无法使用jstack等命令时,可以使用linux的kill相关命令打印堆栈信息。
命令格式:kill -3 PID
kill -3 PID命令只能打印那一瞬间java进程的堆栈信息,适合在服务器响应慢,cpu、内存快速飙升等异常情况下使用,可以方便地定位到导致异常发生的java类,解决如死锁、连接超时等原因导致的系统异常问题。该命令不会杀死进程。
kill -3 pid打印的进程信息在哪里:
(1)如果项目通过Tomcat进行发布(普通的web项目),则对应的堆栈信息会打印在catalina.out文件中。
(2)如果项目是基于SpringBoot并且使用nohup java -jar xxx.jar & 命令运行,则java堆栈信息会在jar包所在的nohup.out文件中。
kill -3 PID
kill -3 pid 得到的进程信息会存入一个文件夹
通过 nohup java -jar humanEnv.jar & 命令启动的jar包,会把进程信息存入jar包所在位置的nohup.out文件中
如下:nohup.out
scp下载到本地查看:
找到这个位置,就是线程相关的信息了
这里对比了一下,通过kill -3 pid打印进程和没有打印进程的文件,打印进程的文件大了不少
并且在未打印进程的文件中确实也找不到进程相关的信息。
jinfo(Configuration Info for Java) 查看虚拟机配置参数信思,也可用于调整虚拟机的配置参数。
top----Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
uptime----查看系统负载
free----显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer
iostat----用于输出CPU和磁盘I/O相关的统计信息
netstat----用于显示各种网络相关信息
df----列出文件系统的整体磁盘空间使用情况
du----用于显示目录或文件的大小
ps----命令用于显示当前进程 (process) 的状态
ping----常用的网络命令,它通常用来测试与目标主机的连通性