SPECjvm测试指导&startup.compiler.sunflow堵塞解决办法
工具简介: SPECjvm2008(java虚拟机基准测试)是用来测试java运行环境(JRE)性能的基准测试套件,其中包含几个核心的JAVA功能实现的基准测试程序。该测试套测试了处理器和内存子系统的性能,但是对文件系统的I/O依赖度很低,并且不包含机器间的网路系统。SPECjvm2008工作负载测试模仿的是各种常见的通用应用计算场景,这些基准测试可以测试测试机器上的JAVA虚拟机性
文章目录
SPECjvm测试指导&startup.compiler.sunflow堵塞解决办法一、 测试环境部署1、服务器上安装待测版本java2、配置java环境变量3、安装SPECjvm20084、检查SPECjvm安装是否正确
二、开始测试1、 执行测试命令2、 说明
三、获取测试结果1、进入测试结果目录2、 测试用例说明,见下表
四、startup.compiler.sunflow出现堵塞现象1、方法一 手动清空堵塞进程的标准错误1.1、打开另一个终端窗口,找到堵塞用例涉及的进程1.2、查看进程相关信息
2、方法二 重新编译SPECjvm2.1、编辑Main.java文件2.2、 解压build-tools.zip文件2.3、重新编译SPECjvm2.4、 编译成功后进入build/release/SPECjvm2008/目录2.5、 在此目录下执行测试命令即可2. 6、测试结果
总结
一、 测试环境部署
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、 测试用例说明,见下表
编号测试用例说明1startup.helloworld测试helloworld程序从运行开始到结束所需的时间2startup.compiler.compiler普通java编译所需要的时间3startup.compiler.sunflow编译sunflow图像渲染引擎所需要的时间4startup.compress测试压缩程序,单次压缩所需的时间5startup.crypto.aes测试AES/DES加密算法,单次加解密所需的时间输入数据长度为100bytes,713KB6startup.crypto.rsa测试RSA加密算法,单次加解密需要的时间输入数据长度为100bytes,16KB7startup.crypto.signverify测试单次使用MD5withRSA,SHA1withRSA,SHA1withDSA,SHA256withRSA来签名,识别所需要的时间。输入数据长度为1KB,65KB,1MB8startup.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/m19compiler.sunflow在规定时间内,多线程迭代测试sunflow图像渲染,得出ops/m20compress在规定时间内,多线程迭代测试压缩,得出ops/m21crypto.aes在规定时间内,多线程迭代测试AES/DES加解密算法,得出ops/m22crypto.rsa在规定时间内,多线程迭代测试RSA加解密算法,得出ops/m23crypto.signverify在规定时间内,多线程迭代测试使用MD5withRSA,SHA1withRSA,SHA1withDSA,SHA256withRSA来签名,识别,得出ops/m24derby在规定时间内,迭代测试数据库相关逻辑,包括数据库锁,BigDecimal计算等,最后得出ops/m25mpegaudio在规定时间内,多线程迭代mpeg音频解码,得出ops/m26scimark.fft.large在规定时间内,多线程迭代测试快速傅立叶变换,使用32M大数据集,最后得出ops/m27scimark.lu.large在规定时间内,多线程迭代测试LU分解,使用32M大数据集,最后得出ops/m28scimark.sor.large在规定时间内,多线程迭代测试jacobi逐次超松弛迭代法,使用32M大数据集,最后得出ops/m29scimark.sparse.large在规定时间内,多线程迭代测试稀疏矩阵乘积,使用32M大数据集,最后得出ops/m30scimark.fft.small在规定时间内,多线程迭代测试快速傅立叶变换,使用512K小数据集,最后得出ops/m31scimark.lu.small在规定时间内,多线程迭代测试LU分解,使用512KB小数据集,最后得出ops/m32scimark.sor.small在规定时间内,多线程迭代测试jacobi逐次超松弛迭代法,使用512KB小数据集,最后得出ops/m33scimark.sparse.small在规定时间内,多线程迭代测试稀疏矩阵乘积,使用512KB小数据集,最后得出ops/m34scimark.monte_carlo在规定时间内,多线程迭代测试蒙特卡罗算法,得出ops/m35serial在规定时间内,多线程迭代测试通过socket传输java序列化对象到对端反序列化(基于jbossserializationbenchmark),得出ops/m36sunflow在规定时间内,利用sunflow多线程迭代测试图片渲染,得出ops/m37xml.transform在规定时间内,多线程迭代测试xml转换,得出ops/m38xml.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的使用和遇到的问题,欢迎给出建议和意见,共同学习。