我有一个使用Apache HttpClient 4.1的简单1线程循环。它连接到我在本地主机上的Apache httpd Web服务器。
我平均每个请求/响应2.5毫秒。另一方面,JMeter平均为1 ms。(Apache
Benchmark,ab,在0.4ms内完成,但由于这是本机代码,因此可能无法进行比较。)
代码只是:
final HttpGet httpGet = new HttpGet(testUrl);
while (true) {
try {
final long startNanoTime = System.nanoTime();
final HttpResponse httpResponse = httpClient.execute(httpGet);
final InputStream inputStream = httpResponse.getEntity().getContent();
final byte[] buffer = new byte[8192];
int size = inputStream.read(buffer);
while (size > 0) {
size = inputStream.read(buffer);
}
// Elapsed time measured here
final long elapsed = System.nanoTime() - startNanoTime;
inputStream.close();
} catch (MalformedURLException e) {
// Should never happen
throw new RuntimeException(e);
} catch (IOException e) {
// Count
errors++;
throw new RuntimeException(e);
}
}
如您所见(或未从图像中看到),将jmeter与一起使用时,平均时间为712ms View Results in a Table
。请注意,此侦听器不会仅输出请求统计信息,而仅显示响应主体。
这是我的Java代码:
public static void main(String[] args) throws Exception{
long totalTimeMS = 0;
for (int i = 0; i < 10; i++) {
long startTime = System.currentTimeMillis();
HttpGet get = new HttpGet("http://stackoverflow.com");
HttpClient client = new DefaultHttpClient();
client.execute(get);
long endTime = System.currentTimeMillis();
long duration = (endTime-startTime);
totalTimeMS +=duration;
System.out.format("Duration %d ms\n", duration);
}
System.out.format("Average time is %d ms", (totalTimeMS/10));
}
因此,我也不关心响应主体。但是这里是结果(更快):
Duration 615 ms
Duration 263 ms
Duration 264 ms
Duration 262 ms
Duration 268 ms
Duration 266 ms
Duration 265 ms
Duration 266 ms
Duration 268 ms
Duration 263 ms
Average time is 300 ms
现在在使用jmeter的另一种情况下,View Results in a Tree
当您可以实际看到响应主体加上时,View Results in a Table
因为我们仍然需要时间。
我不会附上屏幕截图,因为答案将变得难以理解,但是这次的平均时间812 ms
比以前多了100毫秒。
现在,关心响应主体的Java代码(新方法):
public static String convertStreamToString(InputStream is) throws IOException {
if (is != null) {
StringBuilder sb = new StringBuilder();
String line;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
} finally {
is.close();
}
return sb.toString();
} else {
return "";
}
}
而且我已经稍微修改了前面的代码,因此它可以打印出响应,模拟jmeter行为,并发布相关部分:
HttpGet get = new HttpGet("http://stackoverflow.com");
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(get);
long endTime = System.currentTimeMillis();
long duration = (endTime-startTime);
totalTimeMS +=duration;
System.out.println(convertStreamToString(response.getEntity().getContent()));
System.out.format("Duration %d ms\n", duration);
结果如下:
Duration 678 ms + (including printing of response body)
Duration 264 ms + (including printing of response body)
Duration 269 ms + (including printing of response body)
Duration 262 ms + (including printing of response body)
Duration 263 ms + (including printing of response body)
Duration 265 ms + (including printing of response body)
Duration 262 ms + (including printing of response body)
Duration 267 ms + (including printing of response body)
Duration 264 ms + (including printing of response body)
Duration 264 ms + (including printing of response body)
Average time is 305 ms
响应时间增加了5 ms
。所以我不知道jmeter如何比普通的Java代码更快。无论如何,jmeter确实是很棒的工具,是最好的工具之一(免费)。
JavaScript 有两种方式判断两个值是否相等。 等于操作符 等于操作符由两个等号组成:== JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。 "" == "0" // false 0 == "" // true 0 == "0"
问题内容: Docker和OpenShift都是用于实现PaaS服务的框架。 他们如何比较架构和功能? 问题答案: 主要区别在于,Docker作为一个项目仅专注于运行时容器,而OpenShift(作为系统)既包含运行时容器也包括REST API,协调和Web界面,以部署和管理各个容器。 仅比较运行时容器,OpenShift和Docker都使用内核隔离功能将租户进程分开。对于主要通过LXC实现的Do
问题内容: 我在这里张贴了一些代码,可以正确解决发布者遇到的问题。OP希望删除重复项,并将某些特殊项放在列表的顶部。我在一个特殊的类中使用,包装了他们正在使用的类,以实现他们想要的。 然后我开始思考......像你一样......我是通过返回消除重复从方法,而不是通过返回从实现作为一个需要做的正确指示在重复(自定义一个的)。 我不反对使用此技术,但我是否使用了可能被视为 未记录的功能 ?我是否可以
问题内容: 我发布了这个问题,因为我想知道我是否做错了什么严重的事情才能获得此结果。 我有一个中等大小的csv文件,尝试使用numpy加载它。为了说明,我使用python制作了文件: 然后,我尝试了两种方法:numpy.genfromtxt,numpy.loadtxt 结果表明 t1 = 32.159652940464184,t2 = 52.00093725634724 。 但是,当我尝试使用ma
问题内容: 我试图找出如果将主键更改为BIGINT(20)时表的性能是否会下降。目前,我正在使用INT(7),并且已经有大约 300.000个条目具有大ID(7或8位数字) 。我已经搜索了很多东西,但只发现它使用了更多的磁盘空间(这很明显)。 我所有的ID现在都有7位数字,但是我的客户希望更改为8位数字。将来我将无法轻松更改软件,因此我考虑现在使用BIGINT(20)以防万一。即使我不需要使用BI
当我构建我的项目时,我有这个错误 /库/框架/单声道。framework/Versions/5.0。1/lib/mono/msbuild/15.0/bin/Microsoft。常见的当前版本。目标(5,5):错误MSB3073:命令“xcopy”/Users/max/core/ExternalInterfaces/Betinaction。ExtTransactions/Betinaction。Ex