JMH 测试_测试反应速度网站「建议收藏」

JMH 测试_测试反应速度网站「建议收藏」JHM测试框架_error:anotherjmhinstancemightberunning.unabletoacquirethejmhlock

JMH 测试_测试反应速度网站「建议收藏」

JMH的作用

代码工具:jmh


JMH是一个用于构建,运行和分析以Java和其他语言编写的面向JVM的nano / micro / milli / macro基准测试的Java代码库。

相关注解:


//————————————

@State注释定义了给定类的实例可用的范围(JMH允许您同时在多个线程中运行测试)

名称
        描述

Scope.Thread
这是一个默认状态。将为运行给定测试的每个线程分配一个实例。

Scope.Benchmark
运行相同测试的所有线程将共享一个实例。可以用来测试状态对象的多线程性能(或者只是用这个范围标记你的基准)。

Scope.Group
将为每个线程组分配一个实例(请参阅下面的组部分)。

//————————

@BenchmarkMode在测试方法中使用注释指定的以下测试模式:

名称
                 描述

Mode.Throughput
         以时间单位计算操作次数。

Mode.AverageTime
计算平均运行时间。

Mode.SampleTime
         计算运行方法需要多长时间(包括百分位数)。

Mode.SingleShotTime
只需运行一次方法(对冷测试模式有用)。或者如果您为迭代指定了批处理大小,则不止一次(参                           见@Measurement下面的注释) – 在这种情况下,JMH将计算批处理运行时间(批处理中所有调用的
总时间)。

任何一组这些模式
您可以指定任何一组这些模式 – 测试将运行多次(取决于所需模式的数量)。

Mode.All
         所有这些模式一个接一个。

//———————————-

Junit测试

@Setup

完成测试前的初始化工作

@teardown 完成测试完成后的垃圾回收等工作

//————————————-

@OutputTimeUnit     指定时间单位

@OutputTimeUnit(TimeUnit.SECONDS)

TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段

TimeUnit.DAYS          //天

TimeUnit.HOURS         //小时

TimeUnit.MINUTES       //分钟

TimeUnit.SECONDS       //秒

TimeUnit.MILLISECONDS  //毫秒


在Eclipse 中实现一个JMH测试

1.创建maven项目

   1.pom文件:
       <dependency>


<groupId>org.openjdk.jmh</groupId>


<artifactId>jmh-core</artifactId>


<version>1.19</version>


</dependency>


<dependency>


<groupId>org.openjdk.jmh</groupId>


<artifactId>jmh-generator-annprocess</artifactId>


<version>1.19</version>


<scope>provided</scope>


</dependency>
           添加插件
             <plugin>


    <groupId>org.codehaus.mojo</groupId>


    <artifactId>exec-maven-plugin</artifactId>


    <executions>


        <execution>


            <id>run-benchmarks</id>


            <phase>integration-test</phase>


            <goals>


                <goal>exec</goal>


            </goals>


            <configuration>


                <classpathScope>test</classpathScope>


                <executable>java</executable>


                <arguments>


                    <argument>-classpath</argument>


                    <classpath />


                    <argument>org.openjdk.jmh.Main</argument>


                    <argument>.*</argument>


                </arguments>


            </configuration>


        </execution>


    </executions>


</plugin>
       2.代码编写
           package com.ns.proxy.jmhtest;

import java.io.IOException;

import java.util.concurrent.TimeUnit;

import org.apache.http.HttpEntity;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.openjdk.jmh.annotations.Benchmark;

import org.openjdk.jmh.annotations.BenchmarkMode;

import org.openjdk.jmh.annotations.Mode;

import org.openjdk.jmh.annotations.OutputTimeUnit;

import org.openjdk.jmh.annotations.Scope;

import org.openjdk.jmh.annotations.Setup;

import org.openjdk.jmh.annotations.State;

import org.openjdk.jmh.annotations.TearDown;

import org.openjdk.jmh.runner.Runner;

import org.openjdk.jmh.runner.RunnerException;

import org.openjdk.jmh.runner.options.Options;

import org.openjdk.jmh.runner.options.OptionsBuilder;

import com.alibaba.fastjson.JSONObject;

@State(Scope.Benchmark) // 给定类的可用范围

@BenchmarkMode(Mode.Throughput) // 指定测试模式

@OutputTimeUnit(TimeUnit.SECONDS) // 指定时间单位

public class JMHTestProxy {


String url = “”;


String dubbo = “”;


JSONObject entity = new JSONObject();


public static void main(String[] args) throws RunnerException {


Options opt = new OptionsBuilder()//


.include(JMHTestProxy.class.getSimpleName())//


.warmupIterations(2)// 预热次数


.measurementIterations(10)// 真正执行的次数


.forks(1).build();


new Runner(opt).run();


}


@Setup


public void setup() {


url = “http://192.168.201.162:10007/web/”;


dubbo = “http://192.168.201.162:10009/trsdc/tradition/search”;


entity.put(“pageNo”, 1);


entity.put(“query”,


“IR_CONTENT:((\”中国比特币\” OR \”中国比特币\” OR \”中国比特币\”)的) AND IR_LOADTIME:[20151207 TO 201712018]”);


entity.put(“pageSize”, 1);


}


/**


* 需要测试的方法


*/


@Benchmark


public void bufferLoop() {





}


@TearDown


public void getAvgOut() {


}

}

 2.编译

   项目代码完成后不要直接执行:
      在eclipse中runas:


1.maven clean 


2.maven generator-source


3.maven install
  以此来创建BenchmarkList文件



3.遇到的错误

可能一:

一台主机只能运行一个jmh的Java项目

Exception in thread “main” org.openjdk.jmh.runner.RunnerException: ERROR: Unable to acquire the JMH lock (C:\Users\ADMINI~1\AppData\Local\Temp\/jmh.lock): already taken by another JMH instance, exiting. Use -Djmh.ignoreLock=true to forcefully continue.


at org.openjdk.jmh.runner.Runner.run(Runner.java:202)


at com.ns.bloomfilter.JMHTestBloomFilterFile.main(JMHTestBloomFilterFile.java:34)

可能二:

应该是windows权限导致的,java无法在C:\Windows目录下创建文件。两种解决方案。一种是以管理员权限启动intellij,另一种是如错误提示所说,通过-D参数来修改java的系统属性。我选择了前者略微简单一点。

//缺少插件

Exception in thread “main” java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList


at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)


at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:122)


at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:256)


at org.openjdk.jmh.runner.Runner.run(Runner.java:206)


at Example.example.JMHSample_01_HelloWorld.main(JMHSample_01_HelloWorld.java:32)

解决办法:

<plugin>


<groupId>org.codehaus.mojo</groupId>


<artifactId>exec-maven-plugin</artifactId>


<executions>


<execution>


<id>run-benchmarks</id>


<phase>integration-test</phase>


<goals>


<goal>exec</goal>


</goals>


<configuration>


<classpathScope>test</classpathScope>


<executable>java</executable>


<arguments>


<argument>-classpath</argument>


<classpath />


<argument>org.openjdk.jmh.Main</argument>


<argument>.*</argument>


</arguments>


</configuration>


</execution>


</executions>


</plugin>


</plugins>

今天的文章JMH 测试_测试反应速度网站「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75819.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注