もくじ
環境
- 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