java

jdk 工具


# show
jps -lm         # 查看启动的java进程和main方法路径(jar包路径)


# dump
jmap -dump:format=b,file=/tmp/20414dump.dump 1000

jmap -histo:live 1000 | more    # 找到最耗内存的对象
jmap -histo 1000 | head -20     # 查看内存对象大小
jmap -heap pid                  # 查看进程堆内存使用情况

# 线程快照
jstack -l 5402                  # 捕获线程快照,获取线程状态

# GC
jstat -gcutil 1 1000 300        # 间隔1秒, 输出300次

jar 包


jar -xvf app.jar        # 解压 jar 包

# 打包 jar 包 - 把当前目录下的所有文件打包成 app.jar
jar -cvfM0 app.jar ./

综合

nohup java -jar xxx-xxx-1.0.0.jar --spring.profiles.active=prod &

性能排查

  1. 定位进程
  2. 定位线程
  3. 捕获堆栈
# 显示进程运行信息列表,会显示出进程的参数, 然后 P 按CPU 排序
top -c

# 通过进程 PID,查询线程列表,按 P CPU使用率排序
top -Hp 44846

# 先将 线程号转为 16 进制, 因为堆栈里, 线程 id 是用 16 进制表示的
printf "%x\n" 168934  => 293e6

# 捕获线程堆栈
jstack 10765 | grep '293e6' -C5 --color

os 工具

# 捕获堆栈
pstack 77338
最后更新于