工具SPECjvm测试指导startup.compiler.sunflow堵塞解决办法
【工具】SPECjvm测试指导&startup.compiler.sunflow堵塞解决办法
SPECjvm测试指导&startup.compiler.sunflow堵塞解决办法
工具简介:
SPECjvm2008(java虚拟机基准测试)是用来测试java运行环境(JRE)性能的基准测试套件,其中包含几个核心的JAVA功能实现的基准测试程序。该测试套测试了处理器和内存子系统的性能,但是对文件系统的I/O依赖度很低,并且不包含机器间的网路系统。SPECjvm2008工作负载测试模仿的是各种常见的通用应用计算场景,这些基准测试可以测试测试机器上的JAVA虚拟机性
文章目录
一、 测试环境部署
1、服务器上安装待测版本java
参考命令: yum install java-1.8.0 *
注:全量安装java,包括依赖包,若未装全,在测试时可能报错
2、配置java环境变量
参考配置:
(1)配置文件:
vim /etc/profile*
(2)配置文件最后一行添加如下内容
注:不同系统可能默认安装路径不一样
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib/
(3)保存退出
:wq
(4)执行下列命令使其生效
source /etc/profile
(5)检查是否生效
echo $JAVA_HOME
java -version
3、安装SPECjvm2008
安装包:SPECjvm2008_1_01_setup.jar
下载地址:https://www.spec.org/download.html
安装包所在目录执行下列命令进入安装
java -jar SPECjvm2008_1_01_setup.jar -i console
一路回车默认即可,默认安装文件夹为: /SPECjvm2008
简介说明:
许可协议:
许可协议输入“是”就即可:
安装路径,默认回车即可,默认安装文件夹为: /SPECjvm2008:
继续回车即可:
安装结束:
4、检查SPECjvm安装是否正确
进入安装目录:
执行以下命令:
./run-specjvm.sh startup.helloworld -ikv
显示以下信息即执行成功:
二、开始测试
1、 执行测试命令
cd /SPECjvm2008
(1)全量测试:
java -jar SPECjvm2008.jar
(2)base测试
java -jar SPECjvm2008.jar --base
(3)peak测试
java -jar SPECjvm2008.jar --peak
2、 说明
- 官方提供了三种基准测试方式,常用的有两种,一种是base,一种是peak,区别在于前者是不允许做任何vm参数调整;后者可以添加vm调优参数。关于如何添加vm调优参数,自行寻找相关教程,此文不做研究。
注:执行过程中若startup.compiler.sunflow出现堵塞现象,参考“四、特殊环境”
三、获取测试结果
1、进入测试结果目录
cd /SPECjvm2008/results/
2、 测试用例说明,见下表
编号 | 测试用例 | 说明 |
---|---|---|
1 | startup.helloworld | 测试helloworld程序从运行开始到结束所需的时间 |
2 | startup.compiler.compiler | 普通java编译所需要的时间 |
3 | startup.compiler.sunflow | 编译sunflow图像渲染引擎所需要的时间 |
4 | startup.compress | 测试压缩程序,单次压缩所需的时间 |
5 | startup.crypto.aes | 测试AES/DES加密算法,单次加解密所需的时间输入数据长度为100bytes,713KB |
6 | startup.crypto.rsa | 测试RSA加密算法,单次加解密需要的时间输入数据长度为100bytes,16KB |
7 | startup.crypto.signverify | 测试单次使用MD5withRSA,SHA1withRSA,SHA1withDSA,SHA256withRSA来签名,识别所需要的时间。输入数据长度为1KB,65KB,1MB |
8 | startup.mpegaudio | 单次mpeg音频解码所需的时间 |
9 | startup.scimark.fft | 单次快速傅立叶变换所需的时间 |
10 | startup.scimark.lu | 单次LU分解所需的时间 |
11 | startup.scimark.monte_carlo | 单次运行蒙特卡罗算法所需的时间 |
12 | startup.scimark.sor | 单次运行jacobi逐次超松弛迭代法所需的时间 |
13 | startup.scimark.sparse | 单次稀疏矩阵乘积所需的时间 |
14 | startup.serial | 单次通过socket传输java序列化对象到对端反序列化完成所需的时间(基于jbossserializationbenchmark) |
15 | startup.sunflow | 单次图片渲染处理所需的时间 |
16 | startup.xml.transform | 单次xml转换所需的时间,转换包括dom,sax,stream方式 |
17 | startup.xml.validation | 单次xmlschema校验所需的时间 |
18 | compiler.compiler | 在规定时间内,多线程迭代测试普通java编译,得出ops/m |
19 | compiler.sunflow | 在规定时间内,多线程迭代测试sunflow图像渲染,得出ops/m |
20 | compress | 在规定时间内,多线程迭代测试压缩,得出ops/m |
21 | crypto.aes | 在规定时间内,多线程迭代测试AES/DES加解密算法,得出ops/m |
22 | crypto.rsa | 在规定时间内,多线程迭代测试RSA加解密算法,得出ops/m |
23 | crypto.signverify | 在规定时间内,多线程迭代测试使用MD5withRSA,SHA1withRSA,SHA1withDSA,SHA256withRSA来签名,识别,得出ops/m |
24 | derby | 在规定时间内,迭代测试数据库相关逻辑,包括数据库锁,BigDecimal计算等,最后得出ops/m |
25 | mpegaudio | 在规定时间内,多线程迭代mpeg音频解码,得出ops/m |
26 | scimark.fft.large | 在规定时间内,多线程迭代测试快速傅立叶变换,使用32M大数据集,最后得出ops/m |
27 | scimark.lu.large | 在规定时间内,多线程迭代测试LU分解,使用32M大数据集,最后得出ops/m |
28 | scimark.sor.large | 在规定时间内,多线程迭代测试jacobi逐次超松弛迭代法,使用32M大数据集,最后得出ops/m |
29 | scimark.sparse.large | 在规定时间内,多线程迭代测试稀疏矩阵乘积,使用32M大数据集,最后得出ops/m |
30 | scimark.fft.small | 在规定时间内,多线程迭代测试快速傅立叶变换,使用512K小数据集,最后得出ops/m |
31 | scimark.lu.small | 在规定时间内,多线程迭代测试LU分解,使用512KB小数据集,最后得出ops/m |
32 | scimark.sor.small | 在规定时间内,多线程迭代测试jacobi逐次超松弛迭代法,使用512KB小数据集,最后得出ops/m |
33 | scimark.sparse.small | 在规定时间内,多线程迭代测试稀疏矩阵乘积,使用512KB小数据集,最后得出ops/m |
34 | scimark.monte_carlo | 在规定时间内,多线程迭代测试蒙特卡罗算法,得出ops/m |
35 | serial | 在规定时间内,多线程迭代测试通过socket传输java序列化对象到对端反序列化(基于jbossserializationbenchmark),得出ops/m |
36 | sunflow | 在规定时间内,利用sunflow多线程迭代测试图片渲染,得出ops/m |
37 | xml.transform | 在规定时间内,多线程迭代测试xml转换,得出ops/m |
38 | xml.validation | 在规定时间内,多线程迭代测试xmlschema验证,得出ops/m |
四、startup.compiler.sunflow出现堵塞现象
执行过程中startup.compiler.sunflow若出现堵塞现象,参考以下帖子进行排查,若排查结果与帖子一致,使用下列处理方式即可,详细问题原因请阅读帖子内容,此处不再做解释
1、方法一 手动清空堵塞进程的标准错误
1.1、打开另一个终端窗口,找到堵塞用例涉及的进程
ps -aux|grep sunflow
cd /proc/PID/task
—-PID为进程号
在task目录下找到最后一个TID号
1.2、查看进程相关信息
cd TID
(一般是最后一个ID号)
cat syscall
(显示当前进程正在执行的系统调用)
cat fd/2
执行该命令后会打印如下信息
此时,检查正在执行用例的窗口,即可看到startup.compiler.sunflow用例已经通过
#************************************************************
cat fd/2
fd是进程的文件描述符,其中2是标准错误 该命令,个人理解是把fd/2内容打印出来并清空
参考:
![]()
#************************************************************
2、方法二 重新编译SPECjvm
注:该方法执行完的测试结果,在报告中右上角可能显示“Run is valid, but not compliant”信息
2.1、编辑Main.java文件
vim / SPECjvm2008/src/spec/benchmarks/compiler/sunflow/Main.java
在第27行 “-proc:none”, 下一行增加 “-nowarn”,(注意,要有逗号)如图:
保存退出:
:wq
2.2、 解压build-tools.zip文件
cd /SPECjvm2008
unzip build-tools.zip
2.3、重新编译SPECjvm
bash ./build-specjvm.sh
2.4、 编译成功后进入build/release/SPECjvm2008/目录
2.5、 在此目录下执行测试命令即可
可查看到startup.compiler.sunflow项已经执行成功
2. 6、测试结果
此环境,测试结果在下列目录中
cd /SPECjvm2008/build/release/SPECjvm2008/results/
总结
本文仅仅简单介绍了SPECjvm的使用和遇到的问题,欢迎给出建议和意见,共同学习。