JVM(5):性能监控(visualvm)+打印GC日志(必修。。。)

原文出处: 纯洁的微笑

使用visualvm性能监控

1、什么是VisualVM

visualvm是jdk自带的一款监控工具。它提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的程序的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上运行的应用程序的相关数据

2、如何安装

在jkd bin目录下有一个jvisualvm.exe文件 双击就可以使用,或者cmd   jvisualVM

3、如何使用jvisualvm

1、配置JMX管理tomcat:

set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.authenticate=false -    Dcom.sun.management.jmxremote.ssl=false

2、重启tomcat即可

3、双击jvisualvm.exe 添加服务器IP地址,添加需要监控jmx端口即可

效果如下:

ss

 

打印GC日志

1.如何查看当前的垃圾回收器

   -XX:+PrintFlagsFinal
    -XX:+PrintCommandLineFlags
    server client
    MBean
    
GC日志
    1.输出日志
    -XX:+PrintGCTimeStamps 
    -XX:+PrintGCDetails 
    -Xloggc:/home/administrator/james/gc.log
    -XX:+PrintHeapAtGC

 

-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:D:/gc.log

 

java -Xms128m -Xmx128m -verbose:gc -Xloggc:/root/gc.log 
-XX:+PrintHeapAtGC 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCTimeStamps 
-XX:+PrintCommandLineFlags 
-XX:+PrintFlagsFinal 
-XX:+PrintGCDetails 
-XX:+UseConcMarkSweepGC 
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=9004 -Djava.rmi.server.hostname=192.168.116.11 -jar nn-ssm.war > catalina.out 2>&1 &

java -Xms128m -Xmx128m -verbose:gc -Xloggc:/root/gc.log -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTimeStamps -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=9004 -Djava.rmi.server.hostname=192.168.116.11 -jar nn-ssm.war > catalina.out 2>&1 &

 

 

通过代码查看用的什么垃圾收集器

@RequestMapping("/jvm-info")
	@ResponseBody
	public String jvmInfo() {
		List<GarbageCollectorMXBean> l=ManagementFactory.getGarbageCollectorMXBeans();
		StringBuffer sb=new StringBuffer();
		for(GarbageCollectorMXBean b:l) {
			sb.append(b.getName()+'\n');
		}
		return sb.toString();
	}

 

默认的垃圾收收集器PS Scavenge PS MarkSweep,即新生代使用Parallel Scavenge收集器,老年代使用CMS收集器

 

Parallel Scavenge收集器关注的是吞吐量,当系统内存不足,会频繁进行垃圾回收,不会占用CPU

CMS收集器关注的是,当系统内存不足,会占用很高的CPU


    2.日志文件控制

   -XX:-UseGCLogFileRotation
    -XX:GCLogFileSize=8K
    3.怎么看
    
JDK自带的 监控工具
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/toc.html
    jmap -heap pid 堆使用情况 (pid  通过 jps命令 获得)
    jstat  -gcutil pid 1000
    jstack  线程dump 
    jvisualvm
    jconsole
    
打印outofMemory(eclipse-mat)
    http://help.eclipse.org/oxygen/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html
    -XX:+HeapDumpOnOutOfMemoryError 
    -XX:HeapDumpPath=/home/administrator/james/error.hprof

怀疑:
    1.看GC日志  126719K->126719K(126720K)
    2.dump
    3.MAT
        1.占用Retained Heap
        2.看有没有GC Root指向
    
    
VM参数
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

 

 

3.GC日志图解

 

Full GC日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值