チューニング, Linux

Nginx+PHP-FPMチューニング worker_connections are not enough while connecting to upstream

 

AWS

環境

  • Ubuntu
  • AWS EC2

 

worker_connections are not enough while connecting to upstream

JMeterで負荷をかけたら、エラーがでた。確認したところほぼデフォルトのサーバであった。

チューニングしていく

 

接続ソケット数を増やす

 

# sysctl net.core.somaxconn
net.core.somaxconn = 128

 

 

# cd /etc/
# cp sysctl.conf sysctl.conf.`date +%Y%m%d`

 

# vi sysctl.conf

net.core.somaxconn = 2048

 

反映
# sysctl -p

確認
# sysctl net.core.somaxconn
net.core.somaxconn = 2048

 

PHP-FPM設定

 

実行時間の設定

 

# vi /etc/php/7.3/cli/php.ini

;max_execution_time = 30
max_execution_time = 120

 

1プロセスあたりのメモリを確認

# ps alx | grep php | awk '{printf ("%d\t%s\n", $8,$13)}'
 
34080   php-fpm:
41744   php-fpm:
37780   php-fpm:
34660   php-fpm:

・・・

だいたい40MBとなる。

2GBほどPHP-FPMに振り分けることにする。

 

プロセス数を増やす

# vi /etc/php/7.3/fpm/pool.d/www.conf


pm = dynamic
↓
;pm = dynamic
pm = static

pm.max_children = 5
↓
;pm.max_children = 5
pm.max_children = 100

100 * 40MB = 4,000MB = 4GB

 

Nginxが扱えるファイル数を増やす

 

OSが扱えるファイル数を確認

# cat /proc/sys/fs/file-max
1617562

 

このEC2は8CPUなので

1617562 / 8 = 202195.25

 

$ vi /etc/nginx/nginx.conf

worker_rlimit_nofile 198000; ←●worker_connetions * 2.2

events {
        worker_connections 90000; // ●200000 / 2 = 100000 ... バッファを取って90000
        # multi_accept on;
}

fastcgi_read_timeout 120;
fastcgi_send_timeout 120;

 

反映

$ sudo nginx -t
$ sudo systemctl restart nginx

$ sudo systemctl restart php7.3-fpm

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)