网络库压力测试:mongols VS evpp
程序员文章站
2022-03-12 18:34:41
evpp是360出品的一个网络库,基于libevent,进行了许多改造,对c++11友好。据称比libevent性能要好。到底有多好呢?360开发人员有自己的测试,信不信由你。 ......
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() << "\n"
<< " uri=" << ctx->uri() << "\n"
<< " body=" << ctx->body().tostring() << "\n";*/
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压力测试:
分别是:
- ab -kc100 -n100000 http://127.0.0.1:29099/
- ab -kc500 -n100000 http://127.0.0.1:29099/
- ab -kc800 -n100000 http://127.0.0.1:29099/
- ab -kc1000 -n100000 http://127.0.0.1:29099/
前三个跑的比较好,最后一个基本跑不动,报
[warn] error from accept() call: too many open files
前三个的rps保持在[29000,36000)区间,确实比libevent要好些。但绝对没有360开发人员宣传的那么好:
该图显示evpp对多个网络库进行了对比。对此,我只能说,其他库本就没有那么好。
同样的输出,同样的线程数,的测试数据都要优于evpp,rps在[38000,42000)区间。如果使用单线程,mongols的rps基本42000+。而且,mongols的内存占用仅仅为evpp的1/4。
一句话,不要迷信大厂!如图:
重要的事情应该再说一遍:
不要迷信大厂!