top -c 查进程
PID CPU MEN
2305124 root 20 0 5788000 2.1g 11140 S 1.0 29.0 1304:05 java -jar /home/data/mnt/data-sharing-mq/data-sharing-0.0.1-SNAPSHOT.jar
top -Hp 2305124 根据进程号查旗下线程
PID CPU MEN
2732246 root 20 0 5788000 2.1g 11140 S 59.8 29.5 0:08.39 org.springframe
2732289 root 20 0 5788000 2.1g 11140 S 14.6 29.5 0:00.44 thd1
2305133 root 20 0 5788000 2.1g 11140 R 8.6 29.5 87:50.20 java
2305130 root 20 0 5788000 2.1g 11140 R 8.3 29.5 87:49.55 java
把线程号转成十六进制
printf %x 2732246
29b0d6
printf %x 2732289
29b101
printf %x 2305133
232c6d
printf %x 2305130
232c6a
jstack -l 2305124 > ./2305124.stack
jstack -l 进程号,查看进程内所有的堆栈调用情况
根据进程号2305124查出对应的java线程,进行处理
jstack Java自带的堆栈追踪,> ./filename并将堆栈追踪信息输出到当前目录的2305124.stack文件中
cat 2305124.stack | grep ‘29b0d6’ -C 20 执行grep命令,看线程29b0d6做了什么。
jps
Java process查看正在运行的Java进程
jps
2276820 Jps
3527724 jar
399 data-sharing-0.0.1-SNAPSHOT.jar
jinfo 进程号
查看某个Java进程的详细信息
jmap查找Java进程2305124中各对象占用情况
jmap -histo 2305124 | head -20
执行结果:
num #instances #bytes class name
----------------------------------------------
1: 12812723 332995040 [B
2: 6691281 191802240 [C
3: 6350453 152410872 java.lang.String
4: 1700071 122405112 com.sxqx.entity.sync.StationPreHistory
jmap 是 JDK 自带的一个工具,可以生成 Java 进程的内存转储快照(heap dump),也可以查看 Java 进程的内存使用情况。
-histo 参数是 jmap 命令的一个选项,表示输出 Java 堆中各类对象的数量、大小和类名等信息。
2305124是指要查看内存使用情况的Java进程的进程ID。
2305124可以根据top -c找到占用内存最多的Java进程ID。
head -20 表示只显示前 20 行的分析结果,从而使输出结果更加简洁。
因此,运行这个命令将会输出进程 ID 为 2305124 的 Java 程序的内存使用情况的前 20 行分析结果,包括各类对象的数量、大小和类名。请注意,这个命令需要在控制台中执行。
jmap -dump:format=b,file=20240319.hprof 626270
jmap也可以导出堆内存,并且使用jdk自带的工具<java_home>\bin\jvisualvm.exe来解析
jstat –gc
显示gc相关的堆信息,查看gc的次数,及时间
jstat –gc <pid>
安装arthas
arthas命令
1,help
help命令查看全部命令
2,启动
进入arthas安装目录,执行命令:java -jar arthas-boot.jar
3,退出绑定进程
如果启动arthas显示例如Process 4547 already using port 3658
stop命令解除绑定
4,thread如下
5,jvm
显示jvm信息包含了垃圾回收器
6,jad 全路径名.类名 Java Decompiler在线反编辑
比如:jad com.meteorological.service.prehistory.impl.PreHistoryService
7,trace如下
4,thread命令
4,thread
thread 显示所有的线程
ID NAME GROUP PRIORITY STATE %CPU DELTA_TIME TIME INTERRUPTED DAEMON
28 http-nio-1900-Poller main 5 RUNNABLE 0.02 0.000 0:18.069 false true
2 Reference Handler system 10 WAITING 0.0 0.000 0:0.161 false true
1153 Java2D Disposer system 10 WAITING 0.0 0.000 0:0.000 false true
thread 28 显示28号线程调用栈
"http-nio-1900-Poller" Id=28 RUNNABLE (in native)
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:799)
at java.lang.Thread.run(Thread.java:748)
thread -b显示所有的死锁
7,trace 链路追踪,追踪调用链耗时
1,trace命令开始链路追踪之后,触发该接口
2,执行结果中packageName.className:方法名() #57表示该方法所在行号 +---[99.33%时间占比 317.751886ms ]
3,--skipJDKMethod false参数:表示跳过jdk自带方法
1>命令:
trace --skipJDKMethod false trace --skipJDKMethod false com.meteorological.service.cmadaas.radar.impl.RadarService getRadarFileByTimeRange
2>触发命令后:
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 136 ms, listenerId: 3
3>触发接口后:
`---ts=2024-03-11 17:58:01;thread_name=http-nio-1900-exec-5;id=22;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@3a52dba3
`---[53.088744ms] com.meteorological.service.cmadaas.radar.impl.RadarService:getRadarFileByTimeRange()
+---[0.03% 0.01455ms ] com.meteorological.pojo.cmadaas.reqparams1.RadarParams:<init>() #18
com.meteorological.pojo.cmadaas.reqparams1.RadarParams:setDataFormat() #29
+---[0.02% 0.01054ms ] java.lang.System:currentTimeMillis() #30
+---[0.04% 0.019002ms ] java.lang.String:valueOf() #30
+---[0.03% 0.013766ms ] com.meteorological.pojo.cmadaas.reqparams1.RadarParams:setTimestamp() #30
+---[0.14% 0.076705ms ] java.util.UUID:randomUUID() #31
+---[0.02% 0.010492ms ] java.util.UUID:toString() #31
+---[0.01% 0.006414ms ] com.meteorological.pojo.cmadaas.reqparams1.RadarParams:setNonce() #31
+---[0.07% 0.03484ms ] com.meteorological.utils.common.JavaBeanUtils:BeanPropertyNameTraverse() #32
+---[0.03% 0.015445ms ] java.util.HashMap:put() #34
+---[0.38% 0.203014ms ] com.meteorological.utils.tianqing.SignGenUtil:getSign() #35
+---[0.02% 0.010761ms ] java.util.HashMap:remove() #36
+---[0.01% 0.007098ms ] java.util.HashMap:put() #37
`---[98.36% 52.217813ms ] com.meteorological.utils.request.HttpClientUtils:doGet() #40