
今天完成了 MixPHP 的 Mysql/Redis 进程级长连接处理,想着做一下压测,试试性能,于是就拿公司在使用的 Phalcon C 扩展框架对比一下,对比后的结果吓我一跳,感慨 MixPHP 极简架构 + 基于 Swoole 的 MixHttpd + 进程级长连接 带来了如此强大的性能。
测试统计在最后面。
虚拟机:4 核 1G
Apache worker 模式,mpm 配置如下:
这个配置基本上不会有连接上的瓶颈了,这样测试才公平。
<IfModule worker.c> ServerLimit 50 ThreadLimit 200 StartServers 5 MaxClients 5000 MinSpareThreads 25 MaxSpareThreads 500 ThreadsPerChild 100 MaxRequestsPerChild 0 </IfModule> MixHttpd 配置如下:
4 个线程处理连接,8 个进程处理 PHP 代码。
reactor_num = 4 worker_num = 8 请求数据表的第一行,并输出 json。
public function actionIndex() { $this->view->disable(); $query = $this->modelsManager->executeQuery("SELECT * FROM Test")->getFirst(); $data = $query->toArray(); header("Content-Type:application/json;charset="); echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } function actionIndex() { $rows = \Mix::app()->rdb->createCommand("SELECT * FROM `test`")->queryOne(); return $rows; } 工具为 Apache 的 ab 命令。
100 并发,请求全部成功,QPS 为 174.39。
C:\Server\apache24vc11\bin>ab -n 2000 -c 100 http://www.t.com/index/test This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.t.com (be patient) Completed 200 requests Completed 400 requests Completed 600 requests Completed 800 requests Completed 1000 requests Completed 1200 requests Completed 1400 requests Completed 1600 requests Completed 1800 requests Completed 2000 requests Finished 2000 requests Server Software: Apache/2.2.32 Server Hostname: www.t.com Server Port: 80 Document Path: /index/test Document Length: 631 bytes Concurrency Level: 100 Time taken for tests: 11.468 seconds Complete requests: 2000 Failed requests: 0 Total transferred: 1692000 bytes HTML transferred: 1262000 bytes Requests per second: 174.39 [#/sec] (mean) Time per request: 573.422 [ms] (mean) Time per request: 5.734 [ms] (mean, across all concurrent requests) Transfer rate: 144.08 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 2 3.6 1 55 Processing: 27 559 452.9 426 2604 Waiting: 26 555 453.2 422 2603 Total: 28 560 452.8 428 2604 Percentage of the requests served within a certain time (ms) 50% 428 66% 598 75% 717 80% 819 90% 1238 95% 1538 98% 1868 99% 2103 100% 2604 (longest request) 100 并发,请求全部成功,QPS 为 637.81。
C:\Server\apache24vc11\bin>ab -n 2000 -c 100 http://www.ve.com:9501/ This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.ve.com (be patient) Completed 200 requests Completed 400 requests Completed 600 requests Completed 800 requests Completed 1000 requests Completed 1200 requests Completed 1400 requests Completed 1600 requests Completed 1800 requests Completed 2000 requests Finished 2000 requests Server Software: swoole-http-server Server Hostname: www.ve.com Server Port: 9501 Document Path: / Document Length: 613 bytes Concurrency Level: 100 Time taken for tests: 3.136 seconds Complete requests: 2000 Failed requests: 0 Total transferred: 1566000 bytes HTML transferred: 1226000 bytes Requests per second: 637.81 [#/sec] (mean) Time per request: 156.787 [ms] (mean) Time per request: 1.568 [ms] (mean, across all concurrent requests) Transfer rate: 487.70 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.7 1 10 Processing: 88 149 22.2 151 209 Waiting: 26 146 26.9 150 207 Total: 89 150 22.1 152 209 Percentage of the requests served within a certain time (ms) 50% 152 66% 160 75% 165 80% 167 90% 175 95% 182 98% 192 99% 198 100% 209 (longest request) 1000 并发,由于响应太慢,服务器卡死了很久,不得不手动终止,执行成功 5139,失败 8,QPS 为 3.77。
C:\Server\apache24vc11\bin>ab -n 10000 -c 1000 http://www.t.com/index/test This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.t.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Server Software: Apache/2.2.32 Server Hostname: www.t.com Server Port: 80 Document Path: /index/test Document Length: 631 bytes Concurrency Level: 1000 Time taken for tests: 1364.772 seconds Complete requests: 5139 Failed requests: 8 (Connect: 0, Receive: 0, Length: 8, Exceptions: 0) Total transferred: 4388782 bytes HTML transferred: 3275767 bytes Requests per second: 3.77 [#/sec] (mean) Time per request: 265571.594 ms] (mean) Time per request: 265.572 [ms] (mean, across all concurrent requests) Transfer rate: 3.14 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 6 118.5 1 3044 Processing: 14 76341 202529.3 16190 1363728 Waiting: 12 75306 202698.3 15302 1363726 Total: 14 76346 202529.0 16191 1363729 Percentage of the requests served within a certain time (ms) 50% 16190 66% 26254 75% 45141 80% 58735 90% 150683 95% 399760 98% 946039 99% 1294335 100% 1363729 (longest request) 1000 并发,请求全部成功,QPS 任然高达 561.51。
C:\Server\apache24vc11\bin>ab -n 10000 -c 1000 http://www.ve.com:9501/ This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.ve.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: swoole-http-server Server Hostname: www.ve.com Server Port: 9501 Document Path: / Document Length: 613 bytes Concurrency Level: 1000 Time taken for tests: 17.809 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 7830000 bytes HTML transferred: 6130000 bytes Requests per second: 561.51 [#/sec] (mean) Time per request: 1780.914 [ms] (mean) Time per request: 1.781 [ms] (mean, across all concurrent requests) Transfer rate: 429.36 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.9 1 12 Processing: 1211 1642 98.5 1676 1833 Waiting: 368 1343 306.3 1448 1774 Total: 1211 1644 98.6 1677 1836 Percentage of the requests served within a certain time (ms) 50% 1677 66% 1694 75% 1702 80% 1705 90% 1718 95% 1729 98% 1748 99% 1769 100% 1836 (longest request) MixPHP 以压倒性的性能优势 KO Phalcon。
| 框架 | 并发数 | 失败数 | QPS | | MixPHP | 100 并发 | 0 | 637.81 | | Phalcon | 100 并发 | 0 | 174.39 | | 框架 | 并发数 | 失败数 | QPS | | MixPHP | 1000 并发 | 0 | 561.51 | | Phalcon | 1000 并发 | 8 | 3.77 | 1 sagaxu Sep 19, 2017 Phalcon 数据库开长连接了吗? |
2 gouchaoer Sep 20, 2017 via Android phalcon 只能在没有 io 的 hello-world 里性能爆表,在正常的有 session/sql 之类的 io 的业务中和纯 php 性能差别很小,有人做了实验提给 phalcon 社区然后社区也很吃惊。。。 所以我的理解是主要瓶颈还是 io,把 io 弄成异步也好协程也好就能大幅度提高性能。。。。至于 mysql 的连接池问题,我记得有 2 倍不到的 qps 差距,并不大 |
6 sagaxu Sep 22, 2017 @onanying https://docs.phalconphp.com/en/latest/db-layer#connecting-to-databases https://github.com/phalcon/cphalcon/blob/master/phalcon/db/adapter/pdo.zep Phalcon 本身没有长连接,但 PDO 有,建议还是测试一下有无长连接时的性能差距 |
7 mingyun Sep 23, 2017 看安装要求里 https://www.kancloud.cn/onanying/mixphp1/403489,不装 Swoole 也可以吧 |