我的實戰課程(Nginx的服務優化篇中),同學得提出的問題,如下:
關於Nginx的worker_connections到底是什么?如果設置過小會有什么影響,下面我用一個場景演示下:
- 首先,我的場景如下:
- 然后,說下Nginx下的配置
1、nginx.conf
worker_processes 1; events { worker_connections 6; }
2、default.conf
location / { proxy_pass http://www.youku.com/; index index.html index.htm; } location /status { stub_status on; }
3 最后,用ab 工具進行壓測:
場景1、將worker_connections 2,ab -c 1
curl的結果如下:
$ curl -I http://116.62.103.228/ HTTP/1.1 500 Internal Server Error Server: nginx/1.12.1 Date: Tue, 15 Aug 2017 13:58:05 GMT Content-Type: text/html Content-Length: 537 Connection: close ETag: "5964d79b-219
場景2、將worker_connections 4,ab -c 1
curl 正常,返回200;
然后,將worker_connections 6,ab -c 2
可以支持到並發兩個連接。
場景1、2 結論:反向代理的模式下,客戶端n個請求,服務端需要建立n2+2個連接。發現需要多余出兩個連接
所以 最大的用戶連接數 = (worker_connections worker_processes - 2)/2
場景3、將worker_connections 12,ab -n 20 -c 3 http://116.62.103.228/
訪問我的連接狀態地址:http://116.62.103.228/status
Active connections: 4
用netstat查看:
發現除開本身訪問/status連接,正好連接數為:3個
場景3得出結論:
worker_connections 限制指的是單個worker對並發的連接數。
場景4 加大並發數目 ab -c 9如下:
ab -n 9 -c 9 http://116.62.103.228/
出現這個錯誤:apr_socket_recv: Connection reset by peer
另外,再查看nginx的error log出現如下:
2017/08/15 23:13:36 [alert] 15740#15740: 12 worker_connections are not enough 2017/08/15 23:13:36 [alert] 15740#15740: 12 worker_connections are not enough 2017/08/15 23:13:36 [alert] 15740#15740: 12 worker_connections are not enough 2017/08/15 23:13:36 [alert] 15740#15740: 12 worker_connections are not enou
作者:Jeson
鏈接:https://www.imooc.com/article/19907
來源:慕課網
本文原創發布於慕課網 ,轉載請注明出處,謝謝合作