写点什么

第七周作业

用户头像
alpha
关注
发布于: 2020 年 11 月 07 日

1、性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?



在初始阶段系统响应时间基本平稳,吞吐量呈线性增长。因为每个线程都可以申请到足够的CPU、内存等资源。



度过平稳期之后,响应时间逐渐增加,吞吐量呈现出比线性增长慢的方式曲线增长。因为部分线程不能申请到运行所需的全部资源,需要等待其他线程释放资源,然后才能执行。



随着并发量越来越多,响应时间、吞吐量开始下降,直到系统崩溃。我理解有两个原因,一是随着并发量的增加新创建的线程由于无法申请到内存资源从而使用虚拟内存。二是各线程直接争抢资源,可能会导致每个线性申请到的资源都不足以去继续执行下去,于是发生死锁。



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



public class Test {
//用于控制并发执行的个数
private static CyclicBarrier barrier = null;
//用于控制所有线程执行完成后计算平均值
private static CountDownLatch countDownLatchTotal = null;
//统计每次执行的时长
private static Map<Integer, Long> map = new ConcurrentHashMap<>();
//map的key的计算器,map的key也是线程的执行顺序
private static AtomicInteger seq = new AtomicInteger(0);
public static void doTest(String url,int totalRequesTimes,int concurrentTimes) throws Exception{
barrier = new CyclicBarrier(concurrentTimes);
countDownLatchTotal = new CountDownLatch(totalRequesTimes);
ExecutorService executorService = Executors.newCachedThreadPool();
for(int i=0;i<totalRequesTimes;i++){
executorService.execute(() ->{
try {
Test.requestUrl(url);
} catch (Exception e) {
e.printStackTrace();
}finally{
countDownLatchTotal.countDown();
}
});
}
//所有线程执行完成后,计算响应时间
countDownLatchTotal.await();
count(totalRequesTimes);
}
public static void requestUrl(String url) throws Exception{
barrier.await();
long startTime = System.currentTimeMillis();
Httpclient.doGet(url);
long time = System.currentTimeMillis() - startTime;
map.put(seq.incrementAndGet(), time);
}
public static void count(int totalRequesTimes){
//累计执行时间
long totalTimes = 0l;
long total95Times = 0l;
for(int i : map.keySet()){
totalTimes += map.get(i);
if(i<=95){
total95Times += map.get(i);
}
}
System.out.println("map中key的个数:"+map.keySet().size());
System.out.println("平均响应时间:"+(totalTimes/1000)/totalRequesTimes);
System.out.println("95%平均响应时间:"+(total95Times/1000)/(totalRequesTimes*95/100));
}
public static void main(String[] args) throws Exception{
Test.doTest("https://www.baidu.com", 100, 10);
}

}



用户头像

alpha

关注

还未添加个人签名 2019.01.09 加入

还未添加个人简介

评论

发布
暂无评论
第七周作业