【工具】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

tonny1

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、 测试用例说明,见下表

编号测试用例说明
1startup.helloworld测试helloworld程序从运行开始到结束所需的时间
2startup.compiler.compiler普通java编译所需要的时间
3startup.compiler.sunflow编译sunflow图像渲染引擎所需要的时间
4startup.compress测试压缩程序,单次压缩所需的时间
5startup.crypto.aes测试AES/DES加密算法,单次加解密所需的时间输入数据长度为100bytes,713KB
6startup.crypto.rsa测试RSA加密算法,单次加解密需要的时间输入数据长度为100bytes,16KB
7startup.crypto.signverify测试单次使用MD5withRSA,SHA1withRSA,SHA1withDSA,SHA256withRSA来签名,识别所需要的时间。输入数据长度为1KB,65KB,1MB
8startup.mpegaudio单次mpeg音频解码所需的时间
9startup.scimark.fft单次快速傅立叶变换所需的时间
10startup.scimark.lu单次LU分解所需的时间
11startup.scimark.monte_carlo单次运行蒙特卡罗算法所需的时间
12startup.scimark.sor单次运行jacobi逐次超松弛迭代法所需的时间
13startup.scimark.sparse单次稀疏矩阵乘积所需的时间
14startup.serial单次通过socket传输java序列化对象到对端反序列化完成所需的时间(基于jbossserializationbenchmark)
15startup.sunflow单次图片渲染处理所需的时间
16startup.xml.transform单次xml转换所需的时间,转换包括dom,sax,stream方式
17startup.xml.validation单次xmlschema校验所需的时间
18compiler.compiler在规定时间内,多线程迭代测试普通java编译,得出ops/m
19compiler.sunflow在规定时间内,多线程迭代测试sunflow图像渲染,得出ops/m
20compress在规定时间内,多线程迭代测试压缩,得出ops/m
21crypto.aes在规定时间内,多线程迭代测试AES/DES加解密算法,得出ops/m
22crypto.rsa在规定时间内,多线程迭代测试RSA加解密算法,得出ops/m
23crypto.signverify在规定时间内,多线程迭代测试使用MD5withRSA,SHA1withRSA,SHA1withDSA,SHA256withRSA来签名,识别,得出ops/m
24derby在规定时间内,迭代测试数据库相关逻辑,包括数据库锁,BigDecimal计算等,最后得出ops/m
25mpegaudio在规定时间内,多线程迭代mpeg音频解码,得出ops/m
26scimark.fft.large在规定时间内,多线程迭代测试快速傅立叶变换,使用32M大数据集,最后得出ops/m
27scimark.lu.large在规定时间内,多线程迭代测试LU分解,使用32M大数据集,最后得出ops/m
28scimark.sor.large在规定时间内,多线程迭代测试jacobi逐次超松弛迭代法,使用32M大数据集,最后得出ops/m
29scimark.sparse.large在规定时间内,多线程迭代测试稀疏矩阵乘积,使用32M大数据集,最后得出ops/m
30scimark.fft.small在规定时间内,多线程迭代测试快速傅立叶变换,使用512K小数据集,最后得出ops/m
31scimark.lu.small在规定时间内,多线程迭代测试LU分解,使用512KB小数据集,最后得出ops/m
32scimark.sor.small在规定时间内,多线程迭代测试jacobi逐次超松弛迭代法,使用512KB小数据集,最后得出ops/m
33scimark.sparse.small在规定时间内,多线程迭代测试稀疏矩阵乘积,使用512KB小数据集,最后得出ops/m
34scimark.monte_carlo在规定时间内,多线程迭代测试蒙特卡罗算法,得出ops/m
35serial在规定时间内,多线程迭代测试通过socket传输java序列化对象到对端反序列化(基于jbossserializationbenchmark),得出ops/m
36sunflow在规定时间内,利用sunflow多线程迭代测试图片渲染,得出ops/m
37xml.transform在规定时间内,多线程迭代测试xml转换,得出ops/m
38xml.validation在规定时间内,多线程迭代测试xmlschema验证,得出ops/m

四、startup.compiler.sunflow出现堵塞现象

执行过程中startup.compiler.sunflow若出现堵塞现象,参考以下帖子进行排查,若排查结果与帖子一致,使用下列处理方式即可,详细问题原因请阅读帖子内容,此处不再做解释
https://zhuanlan.zhihu.com/p/258483799
https://www.jianshu.com/p/9924b206bdfe
在这里插入图片描述

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的使用和遇到的问题,欢迎给出建议和意见,共同学习。
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值