GuoJ

博客1.0

今天不学习,明天变辣鸡~


jvm定位问题(arthas, jdk命令, NMT)

目录

arthas

  1. 下载命令
    • curl -O https://arthas.aliyun.com/arthas-boot.jar
  2. 启动命令
    • java -jar arthas-boot.jar
  3. 退出session
    • quit或者exit
  4. 中止arthas进程
    • stop
  5. dashbord命令
  6. thread命令
    • thread 列出所有线程
    • thread 1 列出线程ID=1的线程堆栈
    • thread -n 3 列出cpu占用率最高的3个线程
    • thread -i 1000 -n 3 每1000ms采样列出cpu占用率最高的3个线程
    • thread -b 列出blocked的线程
    • thread –state waiting 列出所有waiting状态的线程
  7. jvm命令
    • 包含vm启动项、jdk版本、class path、lib path
    • 包含类加载信息(加载类数量,未加载类数量)
    • 包含编译信息(编译器64位、总编译耗时)
    • 包含垃圾回收信息
    • 包含内存信息heap、no-heap
    • 包含操作系统信息
    • 包含线程信息(当前线程数、当前守护线程数、历史最大线程数、历史启动过的总线程数、死锁线程数)
    • 包含文件信息(允许的最大文件描述符数量、打开文件描述符数量)
  8. vmoption命令
    • vmoption:列出所有vm选项参数key value
    • vmoption [key] [value] : 修改key这个vm属性,改成value这个值
  9. getstatic命令
    • getstatic 类名 属性名 :查看类的静态属性。 例如getstatic com.demo.MyCache cap
  10. ognl命令
    • ognl 表达式 执行代码
  11. sc命令
    • Search Class: 查询类信息,例如sc com.demo.* 查询com.demo包下所有类信息
  12. sm命令
    • Search Method: 查询类的方法,例如sm com.demo.MyCache 查询MyCache这个类的方法
    • sm com.demo.MyCache -d 展示详细信息
  13. trace命令
    • trace class-pattern method-pattern: 追踪类+方法的堆栈及耗时
    • trace -E com.demo.ClassA|com.demo.ClassB method1|method2|save.* -n 100 -m 20 #cost>1000
    • -E:开启正则表达式,之后可以用|(或)符号以及通配符监听多个class和多个method
    • -n 100 监听100次
    • -m 20 最多监听20个类,默认50个

jdk命令

  1. 生成内存镜像dump文件
    • jmap -dump:format=b,file=/data/log/dump.hprof 1
  2. 查询线程数量
    • jstack -l 1 | grep '线程名关键字' | wc -l
    • ps -mp 1 -o THREAD |wc -l
  3. 查询top进程占用资源
    • top :所有进程
    • top -Hp 1 : 进程id=1的线程
  4. 查进程栈
    • jstack -l 1 grep ‘nid=0x4e ‘ -A 20 //0x4e=78
  5. 查看进程(cpu、内存、启动时间、jvm启动项)
    • ps -aux
  6. 查看线程
    • ps -Lf 1
  7. 查gc
    • jstat -gcutil 1
  8. 查top占用内存的Object
    • jmap -histo 1 head -20

NativeMemoryTracking

  • 启动项: -XX:NativeMemoryTracking=summary , 级别: off, summary, detail
  • 命令: jcmd VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
  • 查总结:jcmd 1 VM.native_memory summary scale=MB
  • 创建快照:jcmd VM.native_memory baseline
  • 查总结(对比快照): jcmd 1 VM.native_memory summary.diff scale=MB