JVM学习-1

jvm参数


  1. -Xmx Java Heap最大值,默认值为物理内存的1/4;
  2. -Xms Java Heap初始值,生产机JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
  3. -Xmn Java Heap Young区大小,不熟悉最好保留默认值;
  4. -Xss 每个线程的Stack大小,不熟悉最好保留默认值;
  5. -XX:PermSize:设定内存的永久保存区域;

    java8没有了

  6. -XX:MaxPermSize:设定最大内存的永久保存区域;

  7. -XX:NewSize:设置JVM堆的‘新生代’的默认大小;
  8. -XX:MaxNewSize:设置JVM堆的‘新生代’的最大大小;

jps


Jps命令主要用来查看运行的java进程

jps -mlv

jstatd



待研究

javap



javap主要用来查看java.c文件的源代码

javap -l -p -c ConfigServiceImpl
  1. l – 打印行数和局部变量
  2. p – 打印包括非public在内的所有类和成员信息
  3. c – 打印方法字节码(可以不添加)

jmap



Jmap主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。不需要引发 OutOfMemoryErrors 就可以获取堆dump文件的方法,可以使用jmap生成Heap Dump。然后可以通过Jhat分析。

  1. jmap -dump:live,format=b,file=heap.bin 1354

    其中1354是java进程运行的端口号,需要切换到启动该java进程的用户。如果切换了用户出现这样的情况:
    VMVersionMismatchException: Supported versions are 23.25-b01. Target VM is 24.65-b04需要执行

    update-alternatives --get-selections | grep jinfo
    jinfo auto /usr/lib/jvm/java-6-openjdk-amd64/bin/jinfo

    进行解决 详见

  2. jhat heap.bin

  3. 访问http://localhost:7000,即可查看详细内存信息

jhat



Jhat(Java Heap Analysis Tool),用于分析java堆得情况的工具。可以分析jmap生成的bin文件,也可以分析hprof文件

  1. jvm配置oom的dump文件(catalina.sh)

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}

  2. jhat java_pid5644.hprof 或者 jhat heap.bin
  3. 访问http://localhost:7000,即可查看详细内存信息

jstack



Jstack生成当前线程的快照,主要是分析线程死锁,请求长时间等待。出现程序死锁, hung住的时候非常有必要使用这个命令!!!

jstack -F 4064 > a.out

4064是当前java进程运行端口,如果出现cannot open binary file错误,那么就需要切换到启动该java进程的那个用户。

vim a.out 就可以看到具体的线程情况啦

jstat



实时监控heap size和垃圾回收状况

jstat -gcutil 17010 250 50

17010为jvm pid,250表示250毫秒查看一次,50表示持续50次