[关闭]
@1234567890 2018-03-29T08:24:56.000000Z 字数 1415 阅读 1746

JMC性能测试工具

性能测试


JFR究竟是什么?

Java Flight Recorder(JFR)本来是一个商业特性,用在生产服务器上是需要商业许可(这其实是废话,因为现在不需要许可也可以直接用)。

JFR 记录了关于 Java 运行时及运行在其内的 Java 应用程序的详细信息,记录用少量的开销完成。数据是作为时间上的数据点(称为事件)记录的。典型的事件可以是线程等待锁、GC、CPU 周期使用数据等。

在创建飞行记录时,你可以选择哪些事件应当保存,这叫做记录模板。有些模板只保存基本事件,对性能几乎没有影响。其他模板可能有轻微的性能开销,还可能触发 GC 来收集更多信息。通常,超过百分之几的开销是很罕见。飞行记录可用于调试很大范围的问题,从性能问题到内存泄漏或严重的锁竞争。

注意,JFR是一个性能数据采集工具,它把最终采集到的数据存在一个格式为jfr的文件中,由于本身并不具备数据分析或者可视化功能,所以一般我们需要配合JDK另外一个内置工具,即JMC一起使用。

JMC又是什么?

它是在 JAVA 7u40 发布中加入的图形化性能监控工具,它可以直接打开由jfr生成的原始数据采集文件,

请在自己机器的命令行输入 jmc 来体验。

相比其它Profile工具比有什么优点?

在开发环境中,我们用VisualVM、JProfiler等,功能强大,支持图形化界面操作,可以很快定位代码问题。

但是他们对应用性能的影响也非常大,所以不适合在生产环境下使用。还有这些软件要attach到jvm进程上,生产环境一般网络隔离,很难做到。

在生产环境我们最常用的profiling工具就是java/bin下的jstack,多做几次jstack,也相当于profiling了。

jstack方便易用,但并不是特别适合来做profiling,操作频率低,会导致safepoint指标急剧增长等等。

重点来了,使用jfr不需要在现有应用上额外添加任何参数、重启进程等,直接在命令行执行即可,实时生效,100%无入侵,且稳定可靠,不影响线上应用运行。

安全性如何?

由于这个工具可以直接在线上使用,那么它会有安全性问题吗?会造成客户数据泄露吗?

答案是否定的,因为jfr采集的性能数据其实可以看作是JVM本身的元数据而不是业务数据,因此不存在任何安全性问题,可以放心使用。

使用方式

  1. 1、将自定义配置放入 /usr/install/java/jdk1.8.0_60/jre/lib/jfr
  2. 2jcmd $pid VM.unlock_commercial_features #先解锁技能
  3. 3jcmd $pid JFR.start name=myrec settings=tongdun delay=20s duration=2m filename=/tmp/$pid.jfr
  4. #其中,delay参数表示profile延迟启动时间,duration表示持续采集时间,这里设置为2分钟
  5. #settings表示使用哪种采集配置,这里用的就是第二步中放入的tongdun.jfc配置,它默认有一个名为profile的配置,如果不想采集异常信息,也可以直接用它。
  6. #注意,采集数据生成后请执行下列命令移除这个采集
  7. 4jcmd $pid JFR.stop name=myrec
  8. 5、将收集到的数据,用jmc打开

tongdun.jfc未知大小

工具里具体含义见 https://blog.gmem.cc/jvm-monitoring-with-oracle-jmc

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注