网络浪子 发表于 2019-1-27 09:10:16

Nginx 出現 500 Error 修復 (too many open file, connection)

  Nginx 出現 500 Error, 錯誤訊息只能從 Log 查到, 有遇到下述兩種狀況:

[*]socket() failed (24: Too many open files) while connecting to upstream
[*]512 worker_connections are not enough while connecting to upstream
  在此紀錄解決方法.
Nginx "Too many open files" 修復
錯誤訊息
  2011/05/01 23:00:49 7387#0: *6259768 socket() failed (24: Too many open files) while connecting to upstream, client: 123.123.123.123, server: www.example.com, request: "GET [[/]] HTTP/1.1", upstream: "fastcgi://127.0.0.1:1234", host: "www.example.com"
解法

[*]$ ulimit -n # 看目前系統設定的限制 (ulimit -a # 可查看全部參數)  1024

[*]vim /etc/security/limits.conf # 由此檔案設定 nofile (nofile - max number of open files) 的大小  # 增加/修改 下述兩行
  * soft nofile 655360
  * hard nofile 655360

[*]ulimit -n # 登出後, 在登入, 執行就會出現此值  655360

Nginx "512 worker_connections are not enough" 修復
錯誤訊息
  2011/05/01 23:21:21 19973#0: *6325881 512 worker_connections are not enough while connecting to upstream, client: 123.123.123.123, server: www.example.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:1234", host: "www.example.com"
解法

[*]/etc/nginx/nginx.conf  worker_connections10240;

[*]參考 Nginx CoreModule  worker_processes 2;
  worker_rlimit_nofile 10240;
  events {
  # worker_connections 10240;
  }

  Nginx 的 connection 增加後, 整體速度會變慢很多, 主要原因是 php-cgi 不夠用, 所以要作以下調整.
  php-cgi was started with phpfcgid_children="10" and phpfcgid_requests="500"
  ab was run on another server, connect via a switch using GBit ethernet
  參考此篇設定: PHP performance III -- Running nginx

[*]vim /etc/nginx/nginx.conf  worker_connections 10240;
  worker_rlimit_nofile

[*]vim /etc/init.d/php-fcgi  PHP_FCGI_CHILDREN=15
  PHP_FCGI_MAX_REQUESTS=1000
  改成
  PHP_FCGI_CHILDREN=150
  PHP_FCGI_MAX_REQUESTS=10240

[*]上述文章的 phpfcgid_stop(), 寫得還不錯, 有需要可以用看看.  phpfcgid_stop() {
  echo "Stopping $name."
  pids=`pgrep php-cgi`
  pkill php-cgi
  wait_for_pids $pids
  }


页: [1]
查看完整版本: Nginx 出現 500 Error 修復 (too many open file, connection)