1)jps命令用于查询正在运行的JVM进程
2)jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据
/home/tools/jdk1.8.0_181/bin/jstat -gcutil 30386(java进程号) 2000
3)jinfo用于查询当前运行这的JVM属性和参数的值
[java@xftest0 ~]$ jinfo 43934
Attaching to process ID 43934, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01
Java System Properties:
java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = /usr/java/jdk1.6.0_45/jre/lib/amd64
java.vm.version = 20.45-b01
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
path.separator = :
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg = sun.io
sun.java.launcher = SUN_STANDARD
env = dev
user.country = US
sun.os.patch.level = unknown
4)jmap用于显示当前Java堆和永久代的详细信息
命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件,生成dump的命令为:jmap -dump:live,format=b,file=文文件名(hprof后缀)也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
5)jstack用于生成当前JVM的所有线程快照,线程快照是虚拟机每一条线程正在执行的方法,目的是定位线程出现长时间停顿的原因。
6)top命令通过top -Hp 23344
可以查看该进程下各个线程的cpu使用情况;具体实操经验见:https://www.cnblogs.com/wuchanming/p/7766994.html
7)pidstat实时查看一个进程的CPU使用情况及上下文切换情况
8)vmstat查看总体的CPU使用情况
sudo vmstat 2 3
參数2表示每一个2秒显示一下结果,3表示显示结果的数目。
cs列表示每秒上下文切换次数,us表示用户CPU时间。
9)jmap -heap 29544 查看某一实例jvm配置
二、JVM常见的调优参数包括:
-Xmx
指定java程序的最大堆内存, 使用java -Xmx5000M -version判断当前系统能分配的最大堆内存
-Xms
指定最小堆内存, 通常设置成跟最大堆内存一样,减少GC
-Xmn
设置年轻代大小。整个堆大小=年轻代大小 + 年老代大小。所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss
指定线程的最大栈空间, 此参数决定了java函数调用的深度, 值越大调用深度越深, 若值太小则容易出栈溢出错误(StackOverflowError)
-XX:PermSize
指定方法区(永久区)的初始值,默认是物理内存的1/64, 在Java8永久区移除, 代之的是元数据区, 由-XX:MetaspaceSize指定
-XX:MaxPermSize
指定方法区的最大值, 默认是物理内存的1/4, 在java8中由-XX:MaxMetaspaceSize指定元数据区的大小
-XX:NewRatio=n
年老代与年轻代的比值,-XX:NewRatio=2, 表示年老代与年轻代的比值为2:1
-XX:SurvivorRatio=n
Eden区与Survivor区的大小比值,-XX:SurvivorRatio=8表示Eden区与Survivor区的大小比值是8:1:1,因为Survivor区有两个(from, to)