系統環境:
4核8G 記憶體,SSD硬碟
CentOS 6.5 64位
MySQL 5.6.29
PHP 5.6.22
Apache 2.2.31
nginx 1.10.0
啟用OPcache
web架構為:
把php請求利用Nginx反向代理給后端的Apache或者MIXPHP,
測驗之前,請先查看apache的ab測驗注意點:Apache的ab進行并發性能測驗的注意點
一、基準性能測驗
1000并發,1萬請求數:
ab -n10000 -c1000 {URL}
1、Nginx靜態檔案

Nginx QPS: 14040/秒
暴力測驗1.9萬并發,19萬請求(再高的并發服務就不穩定了):

沒有失敗請求,QPS: 10918/秒
2、原生PHP

PHP QPS :3246/秒
暴力測驗 3000并發,3萬請求:

QPS : 507/秒
并發再高的話,失敗請求就逐漸多了起來,服務不可用了,
3、MIXPHP
基于 Swoole 的常駐記憶體型 PHP 高性能框架測驗,
環境 swoole 1.10.4 、 mixphp 1.0.2
采用Nginx將php請求反向代理給mixphp:http://127.0.0.1:9501

QPS : 6455/秒
暴力測驗:
1.6萬并發,16萬請求數(再高的并發出錯的請求就逐漸多了)

QPS : 4020/秒
此時系統負載2,CPU 40%
4、Go語言

GO QPS:17489/秒
暴力測驗2萬并發,20萬請求:

2萬并發的請求下,沒有失敗請求,QPS :9053/秒,
基準測驗由于不連接資料庫,一般不用于實際專案業務場景的測驗使用,僅供參考而已,
基準測驗(不操作資料庫)總結:
常規性能測驗對比
| ab并發和請求數 | 框架或語言 | QPS(每秒請求數) |
| 1000并發,10000請求 | Nginx | 14040 |
| 1000并發,10000請求 | 原生PHP | 3246 |
| 1000并發,10000請求 | MIXPHP | 6455 |
| 1000并發,10000請求 | Go語言 | 17489 |
暴力性能測驗對比
| ab并發和請求數 | 框架或語言 | QPS(每秒請求數) |
| 19000并發,190000請求 | Nginx | 10918 |
| 3000并發,30000請求 | 原生PHP | 507 |
| 16000并發,160000請求 | MIXPHP | 4020 |
| 20000并發,200000請求 | Go語言 | 9053 |
二、讀取資料庫的性能測驗
連接mysql資料庫,只讀取資料表中一行記錄:
測驗之前,先把mysql的并發連接數提高,my.cnf里面:
[mysqld]
thread_cache_size = 256
max_connections = 10000
否則在高并發時,mysql就會報錯:
Error 1040: Too many connections
1、原生PHP

php QPS :1735/秒
暴力測驗
2000并發,2萬請求(再高的并發失敗請求就逐漸多了起來)

QPS :641/秒
2、Laravel5.1框架QPS測驗
laravel框架測驗的注意點:
1、由于框架加載太多依賴,并發1000,1萬請求時已經產生3000多個失敗請求,所以需要降低測驗要求;
2、對于laravel框架來說,需要給ab加上 -k 引數進行測驗,否則會出現錯誤:apr_poll: The timeout specified has expired (70007) ,
測驗命令:
ab -k -c350 -n3500 http://la.dev/
并發350,3500請求數:

QPS : 58/秒
對laravel進行性能調優:
APP_DEBUG=false php artisan config:cache php artisan route:cache php artisan optimize --force

性能調優后,QPS上升到 118/秒
比未調優之前提高50%,
此時系統負載150,cpu 50%,高負荷運轉,
3、MIXPHP框架(PDO短鏈接)

QPS : 2935/秒
mixphp暴力測驗
1.5萬并發,15萬請求數(再高的并發就不穩定啦)

QPS : 2422/秒
此時系統負載6-8,cpu 60%,在高并發的場景下,QPS下降并不明顯,
4、MIXPHP框架(PDO長鏈接)

QPS : 4367/秒
長鏈接比短鏈接并發性能提高 50%,
mixphp長鏈接暴力測驗
1.5萬并發,15萬請求

QPS :3098/秒
此時系統負載6-8,cpu 60%,在高并發的場景下,QPS下降并不明顯,
5、Go語言

go QPS :4247/秒
go暴力測驗,并發1.8萬,請求18萬:
ab -n 180000 -c 18000 http://localhost:9090/hello

在如此高的并發下,沒有失敗的請求,QPS依然達到了3037/秒;
服務器負載load average 平均5-10,cpu約50%,
再測驗比1.8萬高的并發,ab的Failed requests就逐漸多起來了(ab最多支持2萬并發),原因是mysql資料庫撐不住了,mysql報錯:“dial tcp 127.0.0.1:3306: connect: connection timed out”
go不愧為天生的高并發王者!
測驗總結:
常規性能測驗對比
| ab并發和請求數 | 框架或語言 | QPS(每秒請求數) |
| 1000并發,10000請求 | 原生PHP | 1735 |
| 350并發,3500請求 | Laravel 5.1(開發模式) | 58 |
| 350并發,3500請求 | Laravel 5.1(生產模式) | 118 |
| 1000并發,10000請求 | MIXPHP(短鏈接) | 2935 |
| 1000并發,10000請求 | MIXPHP(長鏈接) | 4367 |
| 1000并發,10000請求 | Go語言 | 4247 |
暴力性能測驗對比
| ab并發和請求數 | 框架或語言 | QPS(每秒請求數) |
| 2000并發,20000請求 | 原生PHP | 641 |
| 15000并發,150000請求 | MIXPHP(短鏈接) | 2422 |
| 15000并發,150000請求 | MIXPHP(長鏈接) | 3098 |
| 18000并發,180000請求 | Go語言 | 3037 |
完,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/301249.html
標籤:其他
