1、查看jvm相关参数
1.1、查看Java进程命令
jcmd
会显示出来对应的Java进程id
1.2、查看堆内存各个区域的使用大小、具体大小和GC次数以及耗时
jstat -gc 4036145
jstat -gc 进程id
各个参数的含义。
如上图,4036145的进程,FGCT是0.452,FGC是4.平均每次full gc耗时0.11秒。
YGCT是18.288,YGC是3207。平均每次young gc耗时0.006秒。可以看出来,full gc明显比young gc耗时要多得多,所以尽量避免full gc。
1.3、查看堆各个区域的使用率以及GC情况
jstat -gcutil 4036145
jstat -gcutil 进程id。
各个参数的含义
1.4、查看jvm参数
jinfo -flags 4036145
各个参数的含义
-XX:CICompilerCount=2:设置编译器线程数为 2,用于编译字节码为本地机器代码。
-XX:InitialHeapSize=60817408:设置初始堆大小为 60817408 字节。
-XX:MaxHeapSize=964689920:设置最大堆大小为 964689920 字节。
-XX:MaxNewSize=321388544:设置年轻代最大大小为 321388544 字节。
-XX:MinHeapDeltaBytes=524288:设置堆大小调整的最小增量为 524288 字节。
-XX:NewSize=19922944:设置年轻代初始大小为 19922944 字节。
-XX:OldSize=40894464:设置年老代初始大小为 40894464 字节。
-XX:+UseCompressedClassPointers:启用压缩的类指针,以减少堆内存使用。
-XX:+UseCompressedOops:启用压缩的普通对象指针,以减少堆内存使用。
-XX:+UseParallelGC:使用并行垃圾收集器,在多个线程中进行垃圾回收操作。
1.5、查看堆各个区域的大小以及使用情况
jmap -heap 4036145
2、设置jvm启动的参数(调优)
像堆各个区域的大小在运行时是无法修改的。我们在启动时来设置下,还是上面的进程。在启动时设置NewSize为100m,MaxNewSize为400m。
所以我们的启动参数是
nohup java -XX:NewSize=100m -XX:MaxNewSize=400m -jar /usr/local/weChatOfficialAccountProject-0.0.1-SNAPSHOT.jar > log.log 2>&1 &
nohup是后台方式启动;> log.log是把启动日志写入到log文件里。
启动好之后我们再次查看堆内存大小。下图可以看到我们设置的jvm参数生效了。
此外还有其它一些参数可以设置像
-Xms512m -Xmx1024m 分别是设置JVM 启动时的初始堆大小为512m和最大堆大小为1024m。