テストサーバー用に完全に無制限のlimits.conf構成を設定する
制限なし!私たちは皆、制限がないことを好むかもしれませんが、それは本当に良いアイデアなのでしょうか?通常、制限がないときには「そこにはドラゴンがいる」と言われます。limits.confについても同様ですが、テストサーバーの場合、実際に無制限のlimits.confが役立ちます!
limits.conf とは何ですか?
limits.confファイルには、Linuxオペレーティングシステムのリソース制限設定が含まれています。Linuxコンピューターがインストールされたとき、このファイルはインストールの一部として作成され、仮想メモリサイズ、最大ファイル数などのリソースの値が含まれていました。
これらの値は事前に指定された制限に設定されており、あなたのLinuxシステムが簡単に過負荷にならないようにしています。さもなければ、悪意のあるプログラムやプロセスが、パフォーマンスの良いシステムを簡単に停止させることができます。例えば、オープンファイルの最大数を無制限に設定した場合を考えてみてください。その際、悪意のあるプロセス(エラーのあるプロセスやウイルス、マルウェアのような悪意のあるソフトウェア)がシステム上でファイルを次々と開き始める場面です。
すぐにシステムはこれらのオープンファイルを処理するために必要なリソースが不足するでしょう。それがあなたのシステムのプロセッサ(CPU)であったり、メモリ、さらには場合によってはディスクであったりします。例えば、最大コアファイルサイズを無制限に設定し、メモリが豊富で残りの空きスペースが少ないシステムで大きなプロセスを実行する場合、または小さなルートドライブの場合です。
要約すると、limits.conf構成ファイルを使用することで、ユーザー(またはシステム管理者)は、ユーザーおよびシステムに利用可能なリソースの制限を指定できます。
limits.confファイルの形式(これは
/etc/security/) は明確に定義されています。一般的に、私たちはユーザーやグループ、さらにはワイルドカードのような適用可能なドメインを指定します。
*), 種類(ソフトまたはハードの制限)、ルールに関連するアイテム(例えば、最大オープンファイル数を定義するnofileアイテムなど)、
locksユーザーが保持できるファイルロックの最大数を定義する項目など)と最後に値(実際の設定/最大値).
limits.confファイルのヘッダーは、適切な詳細でこれを明確に定義しています。
各特定の項目およびlimits.confファイルのその他の設定について詳しく読みたい場合は、次のように実行してください:
man limits.conf
あなたのターミナルプロンプトで。
無制限で行く
一般的に言えば、limits.confを無制限に設定すべきではありません。では、なぜこの記事があるのでしょうか?それは、規則があるところには常に正当な例外があるからです。この場合の例外は、テストサーバーに関するものです。あらゆる種類のテストや品質保証作業を行う際には、しばしばシステムの制限に直面することになります。
無制限に設定し、システムリソース管理を行うための適切なテスト/QAフレームワークを整えることは、limits.confの中で合理的かつシステム特有の制限を維持することへの有効な例外です。他のすべてのサーバーについては、示されているように、サーバーごとの設定が好ましく推奨されます。
それでは、limits.conf のすべての変数とオプションを無制限に設定するスクリプトを紹介しましょう。このスクリプトは、GitHub の mariadb-qa リポジトリにある GPLv2 ライセンスの setup_server.sh スクリプトに基づいています。このスクリプトを使って、テストサーバーの設定において無制限の設定を取り入れるための他のファイルを探ってみるのも良いかもしれません。たとえば、/etc/sysctl.conf の設定や /etc/systemd/logind.conf の設定などです。
無制限にするためにサーバーを設定するには、設定したい(テスト)サーバーのターミナルプロンプトで以下のスクリプトを実行してください。
警告:変更の内容を十分に理解しており、特定の有効な理由がある場合を除き、これは運用中のマシンで行うことは良くない考えであることに注意してください。この点については、この記事で部分的に説明されています。この変更には重大なセキュリティ上の影響もあるため、ファイアウォールとVPNの背後にあるマシンでのみ実施することをお勧めします。つまり、公共のサーバーに対してではありません。要約すると、これを実施するのは自己責任です。
高い値(約20000以上)をソフトおよびハードnprocに使用すると、CentOS 7ではシステムの不安定性やハングを引き起こす可能性がありますが、Ubuntu 18、19、および20では問題ありません。私や他のエンジニアたちは、この設定をテストサーバーのために長い間使用しており、そのアプリケーションにとって理想的です。すべての設定が無制限である中で、nofileだけが1048576という最大値であることに注意してください。
sudo bash -c "cat << EOF > /etc/security/limits.conf
* soft core unlimited
* hard core unlimited
* soft data unlimited
* hard data unlimited
* soft fsize unlimited
* hard fsize unlimited
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 1048576
* hard nofile 1048576
* soft rss unlimited
* hard rss unlimited
* soft stack unlimited
* hard stack unlimited
* soft cpu unlimited
* hard cpu unlimited
* soft nproc unlimited
* hard nproc unlimited
* soft as unlimited
* hard as unlimited
* soft maxlogins unlimited
* hard maxlogins unlimited
* soft maxsyslogins unlimited
* hard maxsyslogins unlimited
* soft locks unlimited
* hard locks unlimited
* soft sigpending unlimited
* hard sigpending unlimited
* soft msgqueue unlimited
* hard msgqueue unlimited
EOF"
これを実行したら、サーバーを再起動して新しい設定をすべて読み込むだけです。リソースを非常に消費するテストが、さまざまな制限設定の問題で停止しなくなる以外、違いに気付くことはないでしょう。
前述のように、言うまでもなく、テストフレームワークの一部として、しっかりとしたワッチドッグとサーバーリソース監視プロセスが必要です。これにより、サーバーが過剰に使用されないようにし、しばしばハングアップや再起動の必要性が生じることを防ぎます。将来の記事では、そのようなスクリプトの基本をご紹介し、そこから自分の設定に合わせて拡張できるようにするかもしれません。
まとめる
/etc/security/limits.confをあらゆる可能な最大値に設定することには有効な使用例があります。一般的には稀ですが(テストサーバーが著しい例として挙げられます)。
この記事では、limits.confについて、なぜ存在するのか、どのようにその設定を変更するのかを学びました。limits.confのフォーマット、構文、イディオムについて探求し、私たちのすべての設定を無制限にするためのシンプルなスクリプトをリストアップしました。
サーバーの制限を低く設定したい場合でも、スクリプトは適応が容易で、あなた自身のスクリプトに統合できます(記載されたようにGPLv2コードとして)。単にunlimitedを希望する値に変更するだけです。これは、サーバーを迅速に所望の値に設定する簡単な方法であり、サーバーファームのlimits.conf設定を統一し、コーディングすることができます。
楽しんで!


