Ubuntu 14.04から16.04にスワップした後、新しいredisサーバーで問題が発生しています。すべてのガイドを使用したオープンファイル制限の構成では、/ etc/security /limits.confを次の設定で変更するように指示されています
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
また、/ etc/pam.d/common-sessionおよび/etc/pam.d/common-session-noninteractiveに追加します
session required pam_limits.so
私はこれらすべての変更を行いましたが、redisはまだ4096のファイル制限で起動しており、本番環境の負荷ではすぐに最大接続数に達します。
多くの検索を行った結果、systemdの標準制限は4096であり、システムレベルで何を設定したかに関係なく、systemdレベルが常に優先されることがわかりました。これに対する修正は、/ etc/systemd/system.confを編集し、次の設定を追加することにより、systemdのオープンファイル制限を変更することです。
DefaultLimitNOFILE=65536
Systemdにはシステム設定を上書きするデフォルト設定がたくさんあるようですので、systemdで設定する必要があります
したがって、人々が使用する場合、これらは本番Redisを実行するためのUbuntu16.04サーバーの最終設定です。
/etc/systemd/system.conf(Sudo nano /etc/systemd/system.conf)を編集して追加します
DefaultLimitNOFILE=65536
/etc/security/limits.conf(Sudo nano /etc/security/limits.conf)を編集して追加します
* soft nofile 64000
* hard nofile 64000
root soft nofile 64000
root hard nofile 64000
/etc/pam.d/common-session(Sudo nano /etc/pam.d/common-session)を編集し、追加します
session required pam_limits.so
/etc/pam.d/common-session-noninteractive(Sudo nano /etc/pam.d/common-session-noninteractive)を編集し、追加します
session required pam_limits.so
/etc/rc.local(Sudo nano /etc/rc.local)を編集して追加します
sysctl -w net.core.somaxconn=65535
/etc/sysctl.conf(Sudo nano /etc/sysctl.conf)を編集して追加します
vm.overcommit_memory = 1
/etc/rc.local(Sudo nano /etc/rc.local)を編集して追加します
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Sysctl値net.core.somaxconn
およびvm.overcommit_memory
は、ulimitまたは開いているファイルの数に関連するメモです。それらは関連しています:
net.core.somaxconn
:開いているが受け入れられていない接続の数を制限します。vm.overcommit_memory
:物理メモリが使い果たされたときにメモリをオーバーコミットするポリシー。問題が開いているファイルの制限にある場合(what ulimit -Sn/-Hn
ハンドル)それなら、あなたが何をしているのかを正確に知らない限り、これで遊ぶことはお勧めしません。