第七周 - 作业

用户头像
jizhi7
关注
发布于: 2020 年 12 月 07 日
  1. 性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

一开始的时候,系统响应时间没太大变化,吞吐量会变高。当达到一定数量后,系统资源被利用的差不多了,响应时间会变大,因为内存,CPU等资源一直在被大量的占用,线程间的切换,内存数据的读取都要会变得更耗时。系统的吞吐量也会慢慢下降了。



  1. 用你熟悉的编程语言写一个 Web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。



代码:

/**
* Web 性能压测工具,
* 输入参数:URL,请求总次数,并发数。
* 输出参数:平均响应时间,95% 响应时间。
*
* @param url
* @param requestCount
* @return
*/
public double testUrl(String url, int requestCount) {
try {
if (url == null || "".equals(url)) {
return 0;
}
long totleTime = 0;
FutureTask[] tasks = new FutureTask[requestCount];
for (int i = 0; i < requestCount; i++) {
FutureTask futureTask = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
long time = requestUrl(url);
return time;
}
});
tasks[i] = futureTask;
}
for (int i = 0; i < requestCount; i++) {
tasks[i].run();
}
int count = 0;
for (int i = 0; i < requestCount; i++) {
long time = (long) tasks[i].get();
if (time != -1) {
totleTime += time;
count++;
} else {
System.out.println("==========请求出错了");
}
}
return totleTime / count;
} catch (Exception ex) {
ex.printStackTrace();
}
return -100;
}
private long requestUrl(String httpurl) {
long startTime = System.currentTimeMillis();
HttpURLConnection connection = null;
try {
// 创建远程url连接对象
URL url = new URL(httpurl);
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
connection = (HttpURLConnection) url.openConnection();
// 设置连接方式:get
connection.setRequestMethod("GET");
// 设置连接主机服务器的超时时间:15000毫秒
connection.setConnectTimeout(15000);
// 设置读取远程返回的数据时间:60000毫秒
connection.setReadTimeout(60000);
// 发送请求
connection.connect();
// 通过connection连接,获取输入流
if (connection.getResponseCode() == 200) {
long endTime = System.currentTimeMillis();
return endTime - startTime;
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
connection.disconnect();
}
return -1;
}



结果:





用户头像

jizhi7

关注

还未添加个人签名 2018.09.08 加入

还未添加个人简介

评论

发布
暂无评论
第七周-作业