写点什么

第 7 周 性能优化(一)作业

用户头像
钟杰
关注
发布于: 2020 年 11 月 09 日

HTTP请求

package com.company;


import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.Map;

//http请求
public class HttpUtil {
/**
* http post请求
* @param count 请求次数
* @param httpUrl 请求URL
* @param param 请求参数
*/
public static void doPost(int count,String httpUrl, String param) {
int i = 0;

while (i != count) {
HttpURLConnection connection = null;

try {
URL url = new URL(httpUrl);
long start = System.currentTimeMillis();
// 通过远程url连接对象打开连接
connection = (HttpURLConnection) url.openConnection();

if (connection.getResponseCode() == 200) {
long finish = System.currentTimeMillis();
long timeElapsed = finish - start;
Stress.TimeList.add(timeElapsed);
i++;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 断开与远程地址url的连接
connection.disconnect();
}
}
}
}


请求线程

package com.company;

//请求线程
public class RequestThread extends Thread {
private int _count=0;

public RequestThread(int count){
_count=count;
}

@Override
public void run() {
HttpUtil.doPost(_count,"http://www.baidu.com","");
}
}


压力测试

package com.company;

import java.util.concurrent.CopyOnWriteArrayList;

//压力测试
public class Stress {
//请求响应时间集合
public static CopyOnWriteArrayList<Long> TimeList=new CopyOnWriteArrayList<Long>();

/**
*
* @param concurrentCount 并发数
* @param requestCount 请求总数
*/
public static void ConcurrentRequest(int concurrentCount,int requestCount) {
//请求数
int count=requestCount/concurrentCount;

for(int i=0;i<concurrentCount;i++) {
RequestThread requestThread = new RequestThread(count);
requestThread.run();
}
}
}


测试客户端

package com.company;

import java.util.Collections;
import java.util.List;

public class Main {
public static void main(String[] args) {
//请求总数
int requestCount=100;
//并发数
int concurrentCount=10;
//压力测试
Stress.ConcurrentRequest(concurrentCount,requestCount);
//请求响应时间列表
List<Long> list=Stress.TimeList;
//总时间
long sumTime=0;

for (long time:list) {
sumTime += time;
}

//平均响应时间
long avgTime=sumTime/requestCount;
System.out.println("平均响应时间为:"+avgTime);
Collections.sort(list);
//95%响应时间
long time95=list.get(94);
System.out.println("95%响应时间为:"+time95);
}
}

所有的性能优化的前提是通过测试性能指标找到性能的瓶颈点才能进行下一步的性能优化,这些指标数据是我们进行性能问题定位和是否解决的参考依据

用户头像

钟杰

关注

还未添加个人签名 2019.02.12 加入

还未添加个人简介

评论

发布
暂无评论
第7周 性能优化(一)作业