Skip to content

Latest commit

 

History

History
188 lines (126 loc) · 6.98 KB

File metadata and controls

188 lines (126 loc) · 6.98 KB

环境配置

测试机环境

  • 主机:Win7,Inter(R) Core(TM) i5-4210U CPU @ 1.70GHz 2.40 GHz

  • 虚拟机:Ubuntu16.04.9 CPU资源:4 核, 内存:4GB

  • Nginx:一种 web 服务器,如果虚拟机没有配置 Nginx ,则需要配置

    如果没有正确配置 Nginx 监听端口, 则启动 webbench 会报错:

    webbench Connect to server failed. Aborting benchmark.

    参考文章 https://www.jianshu.com/p/40594bccff9a 安装和监听 8080 端口。

    浏览器访问 http://127.0.0.1:8080 出现下面结果代表配置和监听 8080 端口成功。


测试工具

  • webbench

    使用方法:

    [root@localhost ~]$ wget http://www.ha97.com/code/webbench-1.5.tar.gz
    [root@localhost ~]$ tar -xzvf webbench-1.5.tar.gz 
    [root@localhost ~]$ cd webbench-1.5
    [root@localhost webbench-1.5]$ make
    [root@localhost webbench-1.5]$ sudo make install

    -t 表示运行测试的时间,如果不指定默认是 30 秒,-c 表示客户端数量,也就是并发数。

    [root@localhost webbench-1.5]$ webbench -c 1000 -t 30 http://blog.csdn.net/
    Webbench - Simple Web Benchmark 1.5
    Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
    
    Request:
    GET / HTTP/1.0
    User-Agent: WebBench 1.5
    Host: blog.csdn.net
    
    
    Runing info: 1000 clients, running 30 sec.
    
    Speed=3932 pages/min, 30209 bytes/sec.
    Requests: 1949 susceed, 17 failed.

    结果分析

    Pages/min:指的输出页数/分 
    bytes/sec:是指比特/秒
    这两个指标能反应网站的访问速度。susceed 和 failed 表示请求的成功数目和失败数目,猜测失败的原因是浏览器没有正确响应客户端的 GET 请求,得不到 200 OK 的响应。
    
    上面的测试使用了相同的参数 (1000的并发数目,30秒),但是不能根据测试结果比较网站的性能。因为还有其它因素,比如测试的当前网页有没有涉及到数据库的访问等等。
  • Linux Top 命令

    查看 Linux 系统进程和其它的状况动态的显示。能够实时显示系统中各个进程的资源占用状况。
    参数解析:
    【第一行】:任务队列信息 top - 14:55:55 (表示系统当前时间) up 7 days 16:00 (表示系统运行时间)
    1、users (表示当前登录用户数) load average (系统负载 三个浮点数分别表示:1分钟、5分钟、15分钟的负载情况)
    系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。如果这个数除以CPU 的数目,结果高于5的时候就表明系统在超负荷运转了。
    1、它没有在等待I/O操作的结果
    2、它没有主动进入等待状态(也就是没有调用'wait')
    3、没有被停止(例如:等待终止)
    【第二行】:【进程信息】
    表示进程总数;
    运行进程数;
    睡眠进程数;
    停止进程数;
    僵尸进程数;
    【第三行】:【CPU信息】
    us 用户空间占用CPU百分比;
    sy 内核空间占用CPU百分比;
    ni 用户进程空间内改变过优先级的进程占用CPU百分比;
    id 空闲CPU百分比;
    wa 等待输入输出的CPU时间百分比;
    hi:硬件CPU中断占用百分比;
    si:软中断占用百分比;
    st:虚拟机占用百分比
    【第四行】:
    Mem:total:物理内存总量; 
    used:使用的物理内存总量; 
    free:空闲内存总量;
    buffers:内核缓存的内存总量;
    【第五行】:
    Swap:total:交换区总量;
    used:使用的交换区总量;
    free:空闲的交换区总量;
    cached:缓冲交换区总量;
    【第六行】:再下面就是进程信息: 
    PID:进程的ID ;
    USER:进程所有者 ;
    PR:进程的优先级别,越小越优先被执行 ;
    NInice:值 ;
    VIRT:进程占用的虚拟内存 ;
    RES:进程占用的物理内存 ;
    SHR:进程使用的共享内存 ;
    S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数 ;
    %CPU:进程占用CPU的使用率 ;
    %MEM:进程使用的物理内存和总内存的百分比 ;
    TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值 ;
    COMMAND:进程启动命令名称;

测试用例

case-01
  • 4 个工作线程并以守护进程运行(./webserver -d -t 4 -p 8080)

  • Linux page size is 4096 bytes

  • wenbench设置: 1000 客户端、连接 60s、短连接

  • 空闲时线程 CPU占用情况:


    测试结果:

    QPS: 6083 传输速度: 4.95 MB/S

    • 测试结果:


    • 测试时线程 CPU 占用:


case-02
  • 8 个工作线程并以守护进程运行( ./webserver -d -t 8 -p 8080)
  • 页面大小: Linux page size is 4096 bytes
  • wenbench设置: 1000 客户端、连接60s、短连接
  • 空闲时 8 线程 CPU 占用情况:

    测试结果:

    QPS: 3785 传输速度: 3.08 MB/S

    • 测试结果:


    分析:

    虚拟机配置的是四个核心,从结果可以看出开 8 个线程的反而比开四个线程的 QPS 低了将近一半,猜测应该是线程之间切换开销增大造成的;

    另外,后面我很纳闷的是,为什么本地虚拟机的 QPS 和传输速度都很低,后来,我重新查看虚拟机的配置的时候,发现我当初配置的是 1 核==。

    下面是配置 4 核 4G 情况的结果:


    case - 03

    测试线程池的测试结果:

      g++ -o threadpool threadpool.cpp -lpthread
      ./threadpool