JVM调优参数与常用工具

常用的JVM调优参数

  • -Xms:设置初始堆大小
  • -Xmx:设置最大堆大小
  • -Xmn:设置年轻代的大小
  • -Xss:设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。
  • -XX:MetaspaceSize:设置元空间的内存大小
  • -XX:MaxMetaspaceSize:设置元空间的最大内存大小
  • -XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5
  • -XX:+PrintGCDetails:开启后,打印GC日志

常用工具

  • jps:查看所有的java进程,包括进程ID与进程名字
  • jstat:jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况,特别的,一个极强的监视内存的工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量
    $ jstat -class 17970 1000 10 (每隔1秒监控一次,一共做10次)
    Loaded Bytes Unloaded Bytes Time
    7837 8534.0 1069 1005.7 27.87
    Loaded:Number of classes loaded.
    Bytes:Number of Kbytes loaded.
    Unloaded:Number of classes unloaded.
    Bytes:Number of Kbytes unloaded.
    Time:Time spent performing class load and unload operations.
  • jstack:观察jvm中当前所有线程的运行情况和线程当前状态。
    系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
    系统hung住了?jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
  • jmap:监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量,系统崩溃了?jmap 可以从core文件或进程中获得内存的具体匹配情况
  • Jconsole:可视化工具,监控内存,线程,类加载等情况
  • Visual VM

你可能感兴趣的:(JVM调优参数与常用工具)