网络库压力测试:mongols VS evpp

Posted hi-nginx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络库压力测试:mongols VS evpp相关的知识,希望对你有一定的参考价值。

evpp是360出品的一个网络库,基于libevent,进行了许多改造,对c++11友好。据称比libevent性能要好。

到底有多好呢?360开发人员有自己的测试,信不信由你。

evpp源码下有个httpecho演示,我把它改为hello,world的样子:

void DefaultHandler(evpp::EventLoop* loop,
                    const evpp::http::ContextPtr& ctx,
                    const evpp::http::HTTPSendResponseCallback& cb) {
    std::stringstream oss;
    /*oss << "func=" << __FUNCTION__ << " OK"
        << " ip=" << ctx->remote_ip() << "
"
        << " uri=" << ctx->uri() << "
"
        << " body=" << ctx->body().ToString() << "
";*/
	oss <<"hello,world";
    //ctx->AddResponseHeader("Content-Type", "application/octet-stream");
	ctx->AddResponseHeader("Content-Type", "text/html;charset=UTF-8");
    ctx->AddResponseHeader("Server", "evpp");
    cb(oss.str());
}

  然后设置线程数为4,匹配我的笔记本。

build,运行下,端口在29099。

进而进行ab压力测试:

分别是:

  1. ab -kc100 -n100000 http://127.0.0.1:29099/
  2. ab -kc500 -n100000 http://127.0.0.1:29099/
  3. ab -kc800 -n100000 http://127.0.0.1:29099/
  4. ab -kc1000 -n100000 http://127.0.0.1:29099/

前三个跑的比较好,最后一个基本跑不动,报

[warn] Error from accept() call: Too many open files

前三个的RPS保持在[29000,36000)区间,确实比libevent要好些。但绝对没有360开发人员宣传的那么好:

技术分享图片

该图显示evpp对多个网络库进行了对比。对此,我只能说,其他库本就没有那么好。

同样的输出,同样的线程数,mongols的测试数据都要优于evpp,RPS在[38000,42000)区间。如果使用单线程,mongols的RPS基本42000+。而且,mongols的内存占用仅仅为evpp的1/4

一句话,不要迷信大厂!如图:

技术分享图片

 

技术分享图片

 

重要的事情应该再说一遍:

不要迷信大厂

 

以上是关于网络库压力测试:mongols VS evpp的主要内容,如果未能解决你的问题,请参考以下文章

evpp mingw64编译过程

evpp性能测试: 与Boost.Asio进行吞吐量对比测试

evpp性能测试: 与Boost.Asio进行吞吐量对比测试

发布一个高性能的Reactor模式的C++网络库:evpp

发布一个高性能的Reactor模式的C++网络库:evpp

Ubuntu虚拟机安装evpp开源库说明