もくじ
ファイルディスクリプタ
# vi /etc/security/limits.conf #<domain> <type> <item> <value> # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 ※以下を追加 root soft nofile 65536 root hard nofile 65536 * soft nofile 65536 * hard nofile 65536
設定の反映
# sysctl -p
# ulimit -n -u -s open files (-n) 1024 max user processes (-u) 31860 stack size (kbytes, -s) 8192
設定反映
# ulimit -n 65536 -u 16384 -s 32768
起動時に設定反映
# echo "ulimit -n 65536 -u 16384 -s 32768" >> /etc/sysconfig/init # reboot now
# ulimit -n -u -s open files (-n) 65536 max user processes (-u) 16384 stack size (kbytes, -s) 32768
TIME_WAIT
デフォルト60秒を30秒に変更します。
# vi /etc/sysctl.conf net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 net.core.somaxconn = 2048 net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_tw_recycle = 1にするhackはsoftbank端末などで障害が起こる可能性があり危険、無効にする。
設定の反映
# sysctl -p
Too many openfiles対策
システムが扱える最大のファイルディスクリプタを確認
# cat /proc/sys/fs/file-max 3199348
今回は初期値で320万程、十分なのでこのままにします。
※変更する場合
# vi /etc/sysctl.conf fs.file-max=3200000
Apache
# mkdir -p /etc/systemd/system/httpd.service.d # vi /etc/systemd/system/httpd.service.d/limits.conf [Service] LimitNOFILE=65535
Nginx
worker_rlimit_nofile 4096; (略) events { worker_connections 1024; }
worker_connectionsの4倍程にworker_rlimit_nofileを設定します。
# mkdir -p /etc/systemd/system/nginx.service.d # vi /etc/systemd/system/nginx.service.d/limits.conf [Service] LimitNOFILE=65535
MySQL
# mkdir -p /etc/systemd/system/mysqld.service.d # vi /etc/systemd/system/mysqld.service.d/limits.conf [Service] LimitNOFILE=65535
# systemctl daemon-reload # systemctl restart mysqld # systemctl restart httpd
# cat /proc/`pgrep httpd | head -1`/limits | grep 'open files' Max open files 65535 65535 files # cat /proc/`pgrep mysqld | head -1`/limits | grep 'open files' Max open files 65535 65535 files # cat /proc/`pgrep nginx | head -1`/limits | grep 'open files' Max open files 65535 65535 files
ファイルが扱えるようになった。
再起動して確認する
# reboot now # ulimit -n 65536 設定値確認 # sysctl -n net.ipv4.tcp_fin_timeout 30
Tuned
# tuned-adm profile throughput-performance
ベンチマーク
ベンチマークもすると良い
# ab -c 10000 -n 10000 http://192.168.1.xxx/app/