Linux top命令
观察当前进程占用的CPU/内存比例等运行状态,
top -Hp 观察进程中的线程,哪个线程CPU和内存占比高
PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
1.D - 不可中断的睡眠态。
2.R – 运行态
3.S – 睡眠态
4.T – 被跟踪或已停止
5.Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
java jps(Java Virtual Machine Process Status Tool)
java提供的可以查看当前的java进程
jstack
Jdk自带的线程跟踪工具,用于打印指定Java进程的线程堆栈信息。
JDK jstack -l [pid]
定位线程状况,重点关注:WAITING BLOCKED
线程状态
NEW :未启动的。不会出现在Dump中。
RUNNABLE :在虚拟机内执行的。运行中状态,可能里面还能看到locked字样,表明它获得了某把锁。
BLOCKED :受阻塞并等待监视器锁。被某个锁(synchronizers)給block住了。
WATING :无限期等待另一个线程执行特定操作。等待某个condition或monitor发生,一般停留在park(), wait(), sleep(),join() 等语句里。
TIMED_WATING :有时限的等待另一个线程的特定操作。和WAITING的区别是wait() 等语句加上了时间限制 wait(timeout)。
TERMINATED :已退出的。
jinfo (Java Configuration Info)
jinfo -flag <name> PID
查看和调整JVM配置参数
标记为manageable的Flags
Linux环境:java -XX:+PrintFlagsInitial | grep manageable
Window环境:java -XX:+PrintFlagsInitial | findstr manageable
Linux jstat -gc
jstat -gc pid time
每time秒会显示一次进程号为pid的java进程的GC情况
java jmap
jmap - histo pid
jmap - histo pid | head -20
查找有多少对象产生
相关参数:
-dump : 生成Java堆转储快照
-heap:显示Java堆详细信息
-histo:显示堆中对象统计信息
jmap -heap pid
显示堆栈信息
jmap -dump:format=b,file=jsconsole.bin pid
生成快照文件
快照文件利于排查线上问题,但是该命令执行期间会对进程产生很大影响。
可以设置参数-XX:+HeapDumpOnOutOfMemoryError,OOM的时候会自动产生堆转储文件
可参考:https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html