-java虚拟机性能测试-SPECjvm

java虚拟机性能测试-SPECjvm

hades 61天前 99

一、术语

  • jvm:java虚拟机,java的运行引擎;
  • JRE:java运行时,包括jvm和类库;
  • 有效:能够产生正确结果的运行为一个有效的运行。可以应用在一个基准、子基准或者全部的测试套件上;
  • 合规:根据运行的规则执行了全部的测试套件为一个合规的运行,要求之一是运行有效;

二、背景

SPECjvm2008的主要目的时衡量JRE的性能,同时也是衡量运行JRE时系统和硬件的性能,着重关注JRE运行单个应用时的性能。它反映了处理器和内存子系统的性能,对文件IO或网络IO的依赖不是很大。
SPECjvm2008工作负载模拟各种常见的通用应用程序计算,这些程序的特征能够反映在各种运行在客户端或服务器上基于java的应用性能。
SPEC了解到用户对java体验很重要,该套件有一个名为base的必需运行类别,必须在不对JVM进行任何调整的情况下运行,即“开箱即用”的体验。

三、工作负载

SPECjvm2008提供了一组负载来反映不同的常见的计算类型,通常,工作负载中的算法和操作是实际应用程序的组成部分,包括文本/字符处理、数值计算和按位计算(例如,媒体处理)。每个工作负载都有特定的工作量要做,使它们本身成为一个小的基准测试,并且几个基准测试有子基准测试()。

测试基准包括:

  • compiler:在规定时间内,多线程迭代测试普通java编译和
    sunflow图像渲染;
  • compress:在规定时间内,多线程迭代测试压缩;
  • crypto:在规定时间内,多线程迭代测试AES/DES加解密算法、RSA加解密算法、使用MD5withRSA, SHA1withRSA, SHA1withDSA, SHA256withRSA来签名,识别;
  • derby:在规定时间内,迭代测试数据库相关逻辑,包括数据库锁,BigDecimal计算等
  • mpegaudio:在规定时间内,多线程迭代mpeg音频解码
  • scimark:在规定时间内,多线程迭代测试快速傅立叶变换、LU分解、jacobi逐次超松弛迭代法、稀疏矩阵乘积,分别测试32M数据集和512KB小数据集;
  • serial:在规定时间内,多线程迭代测试通过socket传输java序列化对象到对端反序列化(基于jboss serialization benchmark);
  • sunflow:在规定时间内,利用sunflow多线程迭代测试图片渲染
  • xml:在规定时间内,多线程迭代测试xml转换、xml schema验证
  • startup:测试以上各项基准测试操作需要的时间。(单线程)

四、测试类型

SPECjvm2008有三个基本的测试类型,常用的时Base和Peak,还有一个叫Lagom的扩展类型。Base类型的测试是必须要执行的测试,并且不能对JVM进行调优,但是可以对硬件或操作系统做调优。Peak测试可以对JVM进行调优,它主要测试性能峰值。

为了创建符合要求的结果,必须包括Base类型中的测试,Peak类型可选。

当Base和Peak都被执行时或生成两个结果,最后会被合并成一个。

五、操作

每调用一次测试基准进行工作负载测试为一次操作。

六、迭代

一次迭代持续一段时间,默认为240秒。测试过程中将启动多个操作,前一个操作完后启动一个新的操作,每个操作持续240秒,除非每个操作执行完成否则不会被中止。

七、热身

第一次迭代为热身,默认120秒,热身结果不计入最终结果,如果想跳过热身可以修改配置文件,或通过命令选项-wt设置,将时间设置为0。

八、并行

大部分的基准测试并发执行,多个操作同一时间在不同的线程中执行。

九 、安装

1.安装JAVA,设置$JAVA_HOME等环境变变量
在文件dao/etc/profile中设置如下:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.ky10.aarch64
export JAVA_BIN=$JAVA_HOME/bin
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_BIN:$PATH
export JAVA_HOME JAVA_BIN PATH CLASS_PATH

保存后,执行 source /etc/profile。
2.下载jar包后需要安装baiSPECjvm,命令如下,注意需要添加参数-i console。
$ java -jar SPECjvm2008_1_01_setup.jar -i console
在安装过程中会提示安装位置,根据实际情况自定义。

3.测试SPECjvm是否安装成功
在安装目录下找到脚本run-specjvm.sh

java -jar SPECjvm2008.jar startup.helloworld -ikv

startup.helloworld 用于测试helloworld程序的启动时间,选择这个测试用例是考虑到运行速度比较快。 -ikv的意思是跳过签名检查,这个过程有点慢。
成功后显示如下所是:

 

SPECjvm2008 Base
Properties file: none
Benchmarks: startup.helloworld
WARNING: Run will not be compliant.
Not a compliant sequence of benchmarks for publication.
Property specjvm.run.checksum.validation must be true for publication.
--- --- --- --- --- --- --- --- ---
Benchmark: check
Run mode: static run
Test type: functional
Threads: 1
Iterations: 1
Run length: 1 operation
Iteration 1 (1 operation) begins: Wed Oct 30 10:22:23 CST 2013
Iteration 1 (1 operation) ends: Wed Oct 30 10:22:23 CST 2013
Iteration 1 (1 operation) result: PASSED
Valid run!
--- --- --- --- --- --- --- --- ---
Benchmark: startup.helloworld
Run mode: static run
Test type: single
Threads: 1
Iterations: 1
Run length: 1 operation
Iteration 1 (1 operation) begins: Wed Oct 30 10:22:23 CST 2013
Iteration 1 (1 operation) ends: Wed Oct 30 10:22:23 CST 2013
Iteration 1 (1 operation) result: 413.79 ops/m
Valid run!
Score on startup.helloworld: 413.79 ops/m
Results are stored in:
/root/SPEC/results/SPECjvm2008.001/SPECjvm2008.001.raw
Generating reports in:
/root/SPEC/results/SPECjvm2008.001
Noncompliant composite result: 413.79 ops/m

十、配置文件

有许多参数控制SPECjvm2008基准测试的运行。每个参数都有一个默认值;用户可以通过在属性文件或命令行中指定参数值来覆盖这些默认值。

10.1 SPECjvm2008参数

SPECJvm2008工具在调整工作负载时非常灵活,以便能够尽可能有效地使用基准测试。SPECjvm2008 的完整参数集记录在文件props/specjvm.properties和props/specjvm.reporter.properties 中。

10.1.1 如何指定SPECjvm2008参数

用户修改参数可以通过命令行指定为参数值或修改属性文件中的属性。通常,参数的有效值是通过以下过程确定的:

  1. 如果一个或多个命令行参数被指定,生效的值为最后给出的;
  2. 如果配置文件被使用且一行或多行参数被指定,生效的参数为文件中最后一次出现的参数为准;
  3. 如果没有修改的参数则取默认值。

10.1.2 属性文件

是否加载属性文件取决于在命令行上是否指定了配置文件的值。如果在命令行上未指定specjvm.propfile的值,则不会加载任何属性文件。如果一个或多个命令行选项指定了specjvm.propfile的值,那么最后一个这样的选项 PROPFILE中指定的值将按如下方式使用。

  1. 如果文件 PROPFILE 存在,则加载该文件;
  2. 如果文件 SPECJVM_HOME/props/PROPFILE 存在,则加载该文件;
  3. 报告警告,未加载属性文件,并继续执行基准测试。

执行测试

命令格式:
java [] -jar SPECjvm2008.jar [] [ ...]

 

JVM优化:

  • -Xmx3550m :设置JVM堆区内存为3550M。
  • -Xms3550m :设置JVM堆区初始内存为3550M.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内。
  • -Xmn2g :设置年轻代大小为2G。
  • 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
  • -XX:+UseNUMA :通过增加应用程序使用较低延迟的内存,实现具有不均匀内存架构(NUMA)的机器上的应用程序的性能优化。默认情况下,禁用此选项,并且不会对NUMA进行优化。该选项仅在使用并行垃圾收集器时可用(-XX:+UseParallelGC)。
  • -XX:+UseParallelGC :选择垃圾收集器为并行收集器。此配置仅对年轻代有效。可以同时并行多个垃圾收集线程,但此时用户线程必须停止。
  • -XX:+UnlockExperimentalVMOptions: 解锁实验参数,允许使用实验性参数,JVM中有些参数不能通过-XX直接复制需要先解锁,比如要使用某些参数的时候,可能不会生效,需要设置这个参数来解锁;一般使用在一些低版本jdk想使用高级参数或者可能高版本有的参数情况。
最新回复 (0)
返回
发新帖
0