目录

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

https://i-blog.csdnimg.cn/blog_migrate/67baf6bd9ff47a77b8ba2c7f2899f243.png

java -version

https://i-blog.csdnimg.cn/blog_migrate/57d31f624a7601c1ae1c04bccbd1ea87.png

3、安装SPECjvm2008

安装包:SPECjvm2008_1_01_setup.jar

下载地址:https://www.spec.org/download.html

安装包所在目录执行下列命令进入安装

java -jar SPECjvm2008_1_01_setup.jar -i console

https://i-blog.csdnimg.cn/blog_migrate/022e99721559d64e05429628bba059f6.png

一路回车默认即可,默认安装文件夹为: /SPECjvm2008

简介说明:

https://i-blog.csdnimg.cn/blog_migrate/be95703c4917fdccc75712bc13ccc548.png

许可协议:

https://i-blog.csdnimg.cn/blog_migrate/66c45d0a4e675c44334d77e8af5281ae.png

许可协议输入“是”就即可:

https://i-blog.csdnimg.cn/blog_migrate/a5d72137529dacca0234d497254b2795.png

安装路径,默认回车即可,默认安装文件夹为: /SPECjvm2008:

https://i-blog.csdnimg.cn/blog_migrate/9fca42bb15fc725d10916be39cc7703f.png

继续回车即可:

https://i-blog.csdnimg.cn/blog_migrate/4582811ea0fcd4b7ace28203f36aa4ad.png

安装结束:

https://i-blog.csdnimg.cn/blog_migrate/86963f083f6ae95c5b1ca2ab2c76b466.png

4、检查SPECjvm安装是否正确

进入安装目录:

https://i-blog.csdnimg.cn/blog_migrate/80b04bef9ab6f54670290b7204e69bf2.png

执行以下命令:

./run-specjvm.sh startup.helloworld -ikv

显示以下信息即执行成功:

https://i-blog.csdnimg.cn/blog_migrate/6034e5dfccb781c3f87097728f622dff.png

二、开始测试

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/

https://i-blog.csdnimg.cn/blog_migrate/4e024158409c4ad2cea8d0b47508ebf7.png

https://i-blog.csdnimg.cn/blog_migrate/ed3b009523cb3be4d8595e5a2bd4c94b.png

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://i-blog.csdnimg.cn/blog_migrate/9baa4065acfcdea78281b47dbc823796.png

1、方法一 手动清空堵塞进程的标准错误

1.1、打开另一个终端窗口,找到堵塞用例涉及的进程

ps -aux|grep sunflow
cd /proc/PID/task

—-PID为进程号

在task目录下找到最后一个TID号

https://i-blog.csdnimg.cn/blog_migrate/7c67f53101395d98d7a842b74427e130.png

1.2、查看进程相关信息

cd TID

(一般是最后一个ID号)

cat syscall 

(显示当前进程正在执行的系统调用)

https://i-blog.csdnimg.cn/blog_migrate/34fb5c8ae6e8d6ff2eb9e29d4c46df66.png

cat fd/2

执行该命令后会打印如下信息

https://i-blog.csdnimg.cn/blog_migrate/6054c969c4d5c4231572b5c4f078ac7c.png

此时,检查正在执行用例的窗口,即可看到startup.compiler.sunflow用例已经通过

#************************************************************

cat fd/2

fd是进程的文件描述符,其中2是标准错误 该命令,个人理解是把fd/2内容打印出来并清空

https://i-blog.csdnimg.cn/blog_migrate/ee4ed31564165bac713a3b45764b74e7.png

参考:

https://i-blog.csdnimg.cn/blog_migrate/8b7e705d7dafa45d8fb83a990874ca5e.png https://i-blog.csdnimg.cn/blog_migrate/3a30a43020093997e92a28073469abe2.png

#************************************************************

2、方法二 重新编译SPECjvm

注:该方法执行完的测试结果,在报告中右上角可能显示“Run is valid, but not compliant”信息

2.1、编辑Main.java文件

vim / SPECjvm2008/src/spec/benchmarks/compiler/sunflow/Main.java

https://i-blog.csdnimg.cn/blog_migrate/2a76c8a458ed8b8223623b59b0a17df0.png

在第27行 “-proc:none”, 下一行增加 “-nowarn”,(注意,要有逗号)如图:

https://i-blog.csdnimg.cn/blog_migrate/66f23438be36bbe94d206487b3bc29a2.png

保存退出:

:wq

2.2、 解压build-tools.zip文件

cd /SPECjvm2008
unzip build-tools.zip

https://i-blog.csdnimg.cn/blog_migrate/e3faa7d236de6a07549703454876d0c6.png

2.3、重新编译SPECjvm

bash ./build-specjvm.sh

https://i-blog.csdnimg.cn/blog_migrate/cc3ca2122bb25e92d637b1bb1424da9b.png https://i-blog.csdnimg.cn/blog_migrate/40f840864d727e242b7851e853d67d53.png

2.4、 编译成功后进入build/release/SPECjvm2008/目录

https://i-blog.csdnimg.cn/blog_migrate/8b31ad363fe1c820b5b214cc59606453.png

2.5、 在此目录下执行测试命令即可

可查看到startup.compiler.sunflow项已经执行成功

https://i-blog.csdnimg.cn/blog_migrate/88966d6cc14424b23d23ea1bd6af1dba.png

2. 6、测试结果

此环境,测试结果在下列目录中

cd /SPECjvm2008/build/release/SPECjvm2008/results/

总结

本文仅仅简单介绍了SPECjvm的使用和遇到的问题,欢迎给出建议和意见,共同学习。