PHP7+Swoole/Nginx/Golang性能对比

QPS对比

使用apache bench工具对Nginx静态页、Golang Http程序、PHP7+Swoole Http程序进行压力测试。在同一台机器上,进行并发100共100万次Http请求的基准测试中,QPS对比如下:

软件 QPS 软件版本
Nginx164489.92nginx/1.4.6 (Ubuntu)
Golang166838.68go version go1.5.2 linux/amd64
PHP7+Swoole287104.12 swoole-1.7.22-alpha
Nginx-1.9.9245058.70nginx/1.9.9

注:Nginx-1.9.9的测试中,已关闭access_log,启用open_file_cache缓存静态文件到内存

测试环境

  • CPU:Intel® Core™ i5-4590 CPU @ 3.30GHz × 4
  • 内存:16G
  • 磁盘:128G SSD
  • 操作系统:Ubuntu14.04 (Linux 3.16.0-55-generic)

压测工具

ab -c 100 -n 1000000 -k http://127.0.0.1:8080/

VHOST配置
  1. server {
  2. listen 80 default_server;
  3. root /data/webroot;
  4. index index.html;
  5. }
测试页面
  1. Hello World!

进程数量

Nginx开启了4个Worker进程

  1. htf@htf-All-Series:~/soft/php-7.0.0$ ps aux|grep nginx
  2. root 1221 0.0 0.0 86300 3304 ? Ss 1207 0:00 nginx: master process /usr/sbin/nginx
  3. www-data 1222 0.0 0.0 87316 5440 ? S 1207 0:44 nginx: worker process
  4. www-data 1223 0.0 0.0 87184 5388 ? S 1207 0:36 nginx: worker process
  5. www-data 1224 0.0 0.0 87000 5520 ? S 1207 0:40 nginx: worker process
  6. www-data 1225 0.0 0.0 87524 5516 ? S 1207 0:45 nginx: worker process

Golang

测试代码
  1. package main
  2.  
  3. import (
  4. "log"
  5. "net/http"
  6. "runtime"
  7. )
  8.  
  9. func main() {
  10. runtime.GOMAXPROCS(runtime.NumCPU() - 1)
  11.  
  12. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  13. w.Header().Add("Last-Modified", "Thu, 18 Jun 2015 10:24:27 GMT")
  14. w.Header().Add("Accept-Ranges", "bytes")
  15. w.Header().Add("E-Tag", "55829c5b-17")
  16. w.Header().Add("Server", "golang-http-server")
  17. w.Write([]byte("

    \nHello world!\n

    \n"))
  18. })
  19.  
  20. log.Printf("Go http Server listen on :8080")
  21. log.Fatal(http.ListenAndServe(":8080", nil))
  22. }

PHP7+Swoole

PHP7已启用OpCache加速器。

PHP版本
  1. htf@htf-All-Series:~/soft/php-7.0.0$ php -v
  2. PHP 7.0.0 (cli) (built: Dec 10 2015 14:36:26) ( NTS )
  3. Copyright (c) 1997-2015 The PHP Group
  4. Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
  5. with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
测试代码
  1. $http = new swoole_http_server("127.0.0.1", 9501, SWOOLE_BASE);
  2. $http->set([
  3. 'worker_num' => 4,
  4. ]);
  5. $http->on('request', function ($request, swoole_http_response $response) {
  6. $response->header('Last-Modified', 'Thu, 18 Jun 2015 10:24:27 GMT');
  7. $response->header('E-Tag', '55829c5b-17');
  8. $response->header('Accept-Ranges', 'bytes');
  9. $response->end("<h1>\nHello Swoole.\n</h1>");
  10. });
  11. $http->start();