性能測試

測試環境:

CPU:      Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz and 4 processors totally
Memory:   8G
OS:       Ubuntu 14.04 LTS
Software: ab
PHP:      5.5.9

業務邏輯


require_once './Workerman/Autoloader.php';
use Workerman\Worker;
$worker = new Worker('tcp://0.0.0.0:1234');
// 進程數配置成cpu核數-1,保留一個cpu給ab進程
$worker->count=3;
$worker->onMessage = function($connection, $data)
{
    $connection->send("HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nServer: workerman\1.1.4\r\n\r\nhello");
};
Worker::runAll();

結果

ab -n1000000 -c100 -k http://127.0.0.1:1234/
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests


Server Software:        workerman/3.1.4
Server Hostname:        127.0.0.1
Server Port:            1234

Document Path:          /
Document Length:        5 bytes

Concurrency Level:      100
Time taken for tests:   7.240 seconds
Complete requests:      1000000
Failed requests:        0
Keep-Alive requests:    1000000
Total transferred:      73000000 bytes
HTML transferred:       5000000 bytes
Requests per second:    138124.14 [#/sec] (mean)
Time per request:       0.724 [ms] (mean)
Time per request:       0.007 [ms] (mean, across all concurrent requests)
Transfer rate:          9846.74 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       5
Processing:     0    1   0.2      1       9
Waiting:        0    1   0.2      1       9
Total:          0    1   0.2      1       9

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      1
  98%      1
  99%      1
 100%      9 (longest request)
無流量抖動,無內存泄漏,性能非常強悍

壓測評價

    壓力測試腳本和workerman服務端運行在同一臺服務器上,因為壓測的地址均為為127.0.0.1,所以流量沒有走網卡。壓測使用的是版本較低的PHP5.3.10版本,使用高版本PHP如PHP5.6性能將會更高,壓測成績也將會更好。
    壓測均使用較小的數據包,并且業務邏輯簡單,復雜的業務壓力測試開發者可以根據自己的業務情況自行實施,肯定也會給開發者一個大大的驚喜。

為什么workerman擁有卓越的性能

避免讀取磁盤和反復編譯

Yy4080私人影院 workerman運行過程中,單個進程生命周期內只要PHP文件被載入編譯過一次,便會常駐內存,不會再去從磁盤讀取或者再去編譯。 workerman省去了重復的請求初始化、創建執行環境、詞法解析、語法解析、編譯生成opcode以及請求關閉等諸多耗時的步驟。 實際上workerman運行起來后便幾乎沒有磁盤IO及PHP文件編譯開銷,剩下的只是簡單的計算過程,這使得workerman運行飛快。

數據或者資源可以全局共享

workerman中多個請求是可以共享數據或者資源的,當前請求產生的全局變量或者類的靜態成員在下一次請求中仍然有效。 這對于減少開銷,提高運行效率非常有用。例如業務只要初始化一次數據庫連接,那么全局都可以共享這個連接,這實現了真正意義上的數據庫長連接。 從而不必每次用戶請求都去創建新的連接,避免了連接時三次握手、連接后權限驗證以及斷開連接時四次揮手等耗時的交互過程。不僅數據庫,像redis、 memcache等同樣有效。少了這些開銷和網絡交互,使得workerman運行更快。

沒有多余的網絡開銷

Yy4080私人影院 傳統PHP應用程序需要借助apache、nginx等容器才能對外提供網絡服務,這就導致多了一層apache、nginx等容器到PHP進程的數據傳輸開銷。 并且由于運行了apache或者nginx容器,這將進一步消耗服務器的資源。 workerman便沒有這部分開銷,這是由于workerman自身便是一個服務器容器具有PHP進程管理以及網絡通訊功能, 完全不依賴于apache、nginx、php-fpm等這些容器便可以獨立運行,所以性能更高。

進程模型簡單

workerman是多進程(也有多線程版本)的,可以充分利用服務器多核資源。并且workerman具有簡單的進程模型,主進程只負責監控子進程,而每個子進程獨自接受維護客戶端的連接,獨自讀取連接上發來的數據,獨自處理。 子進程間默認沒有任何數據通訊,主進程和子進程之間只有一次信號通訊。簡單的進程通訊模型使得workerman相比其它復雜的進程模型的軟件更高效。


相關連接

版權所有 成都風禾網絡科技有限公司


Powered by web-msg-sender!




聯系我們
  • QQ群1:257046084 (2000人已滿)
    QQ群2:137410824 (2000人已滿)
    QQ群3:527941005 (2000人已滿)
    QQ群4:172789145 (2000人已滿)
    QQ群5:605328640 (2000人已滿)
    QQ群6:532976970 (2000人已滿)
    QQ群7:679148501 (2000人已滿)
    QQ群8:812483358 (2000人已滿)
    QQ群9:645569639 (2000人已滿)
    QQ群10:549059456 (2000人)
    游戲開發群:564297822(2000人)
    提示:一個人只能加一個群哦
    郵箱:walkor#workerman.net