JVM快速调优命令汇总

CPU监控:进程和线程

1# 观察哪个进程CPU和内存占比高 2top 3# 观察进程中的线程,哪个线程CPU和内存占比高 4top -Hp [pid] 5# top 16837 6# top -Hp 16837
  • 定位具体java进程

    定位具体java进程

    jps

    jps -l

分析 Thread Dump

  • 在线导出堆栈信息

    jstack -l [pid]

    jstack -l 16837

查看GC日志

  • 事前方式 JVM启动时增加VM Option参数:

    -Xloggc:/path/to/log/dir/gc-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause

  • 在线方式

    每500个毫秒打印GC的情况

    jstat -gc [pid] 500

    jstat -gc 16837 500

获取 Heap Dump

  • 事前方式(建议) JVM启动时增加两个VM Option参数:

    #出现 OOME 时生成堆 dump, 生成堆文件地址 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dir/

  • 事后方式 发现程序异常前通过执行指令,直接生成当前JVM的dmp文件, pid为java程序的进程id。

    jmap -dump:format=b,file=/path/to/dir/dumpfile [pid]

    jmap -dump:format=b,file=serviceDump.dat 16837

注意:jmap 在执行转存储jmap -dump时,JVM是暂停服务的,所以对线上的运行会产生影响

分析 Heap Dump

  • 在线查找 Heap 有多少对象产生

    jmap -histo [pid]

    jmap -histo 16837 | head -20

其他方式: arthas

  • 离线分析 Heap Dump

    启动 http://localhost:7000/

    注意 -J-Xms 之间没有空格

    jhat -port 7000 -J-Xmx2048m 文件名

其他方式: jvisualvm mat jprofiler

by Sven Augustus https://my.oschina.net/langxSpirit

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java多线程常见问题

Java多线程是什么Java提供的并发(同时、独立)处理多个任务的机制。多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级。依我的理解,Java多线程完全就是为了提高CPU的利用率。Java的线程有4种状态,新建(New)、运行(Runnable)、阻塞(Blocked)、结束(Dead),关键就在于阻塞(Bl

java多线程的学习

1,进程和线程 1,一个进程和另外一个进程的之间是隔离的。但是对cpu来说都是一样的。一边打游戏,一边看电影。2,两个线程是共享着同一片资源,在同一个进程里面,例如在腾讯视频,同时打开两部电影。3,他们的目的都是充分的利用cpu。4,java虚拟机就是一个进程。5,线程的实现两种方式 Runnable接口,继承Threa

4、jstack查看线程栈信息

1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6