網絡庫壓力測試: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() << "\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壓力測試:

分別是:

  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

一句話,不要迷信大廠!如圖:

 

 

重要的事情應該再說一遍:

不要迷信大廠

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM