Skip to content

Latest commit

 

History

History
54 lines (42 loc) · 2.5 KB

apache_ab_bench_cn.md

File metadata and controls

54 lines (42 loc) · 2.5 KB

Apache ab 压测

Apache ab 是一个常用的http服务器压测工具。这里对cppnet test目录中的http测试服务分别在不同平台进行压测,执行的命令为:

ab -kc[1-10000] -n100000 http://127.0.0.1:8921/hello

每次将上述命令执行三次,取三次中QPS的最高值,并将测试结果绘制为折线图。
折线图中纵坐标为QPS, 横坐标为并发值。

Linux

压测环境

  • 系统环境为Widnows的WSL2
  • 操作系统为Ubuntu20.04
  • 系统内存16G DDR3 2666Mhz
  • CPU为 i7-6700 @ 3.40GHz 四核
  • 编译优化为-O2
  • 所有测试均开2个线程

在Linux上与muduo进行了对比,由于Linux上可以在REUSE_PORT之外额外支持EPOLLEXCLUSIVE,所以又添加了两种不同选项的对比,结果如下图所示

linux_apache_ab_bench

图中cppnet_1为使用REUSE_PORTcppnet_2为使用EPOLLEXCLUSIVE
使用REUSE_PORT时,整体效率稍稍优于muduo
在使用EPOLLEXCLUSIVE时,性能整体都优于muduo(muduo尚未支持EPOLLEXCLUSIVE设置)。

Windows

压测环境

  • 系统环境为物理真机
  • 操作系统为Windows 10 @ 19042.985
  • 系统内存16G DDR3 2666HZ
  • CPU为 i7-6700 @ 3.40GHz 四核
  • 编译优化为/O2

由于在Windows环境使用的是IOCP,系统内核负责管理线程池,各个socket唤醒操作将在不同的线程上执行,这与Linux和MacOS大相径庭,所以特意列了不同线程数量时的压测表现,结果如下图所示

linux_apache_ab_bench

MacOS

压测环境

  • 系统环境为物理真机
  • 操作系统为MacOS @ 10.15.4
  • 系统内存8G DDR3 2133Mhz
  • CPU为 i5-8257U @ 1.40GHz 四核
  • 编译优化为-O2
  • 2个线程

压测结果如下图所示

linux_apache_ab_bench

结语

跨平台与高性能往往难以兼得,由于先开发的Linux平台,后适配的Windows平台,且IOCP的使用方式与EpollKqueue有着极大的不同,框架上也没法过于妥协。Windows平台上有很多保证线程安全的锁,并没有完美发挥出IOCP的性能,所以在Windows平台上性能表现一般。
在Linux和MacOS上,常规并发条件下,大部分QPS都能超过10万,性能表现还算优异。