第七周 - 作业
发布于: 2020 年 12 月 07 日
性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?
一开始的时候,系统响应时间没太大变化,吞吐量会变高。当达到一定数量后,系统资源被利用的差不多了,响应时间会变大,因为内存,CPU等资源一直在被大量的占用,线程间的切换,内存数据的读取都要会变得更耗时。系统的吞吐量也会慢慢下降了。
用你熟悉的编程语言写一个 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; }
结果:
划线
评论
复制
发布于: 2020 年 12 月 07 日阅读数: 13
jizhi7
关注
还未添加个人签名 2018.09.08 加入
还未添加个人简介
评论