追加読書

追加読書

1つまたはいくつかの重要なシステムサービスデーモンを使用して一部のLinuxサーバーを実行すると、奇妙なことが発生した場合に備えて、これらのデーモンのOOMキラーを調整したいと思います。たとえば、今日MySQLを実行しているUbuntuサーバーの中には、apt-checkerMySQLデーモンの多くのプロセスが原因で終了しました。はいすべてのメモリが消費され、カーネルはMySQLを終了するのが良い考えだと思います。

私はファイルを使ってスコアを調整して/proc/$(pidof mysqld)/oom_score_adjMySQLが終了したくないという手がかりをカーネルに提供できることを知っていますが、これはサービスを再起動しても保持されません。これらの調整を含めるには、パッケージのinit / upstartスクリプトを編集する必要がありますか?私はパッケージに属するファイルを調整するので、これは非常にエレガントな解決策だとは思わない。通常のupstart / initスクリプトに接続して条件に合わせて調整できますか?または、次のように未定義のスクリプトを実行することをお勧めしますかwhile true{ adjust_oom(); sleep 60;}

答え1

いくつかの最新のデーモン監視システムにはこれを行う方法があります。 (実際に対応する作業を行うチェーンローディングツールがあるため、みんなこれを行う方法があります。 )

  • 突然現れる:oom score作業ファイルに使用されます。
    オームスコア-500
  • システム:OOMScoreAdjust=サービスユニットの設定を使用してください。サービスユニットパッチファイルを使用して、事前にパッケージ化されたサービスユニットに影響を与えることができます。
    [サービス] 
    OOMScoreAdjust=-500
  • デーモンツールシリーズ:oom-kill-protectサービスプログラムのnoshツールセットのツールを使用してください。run

    システムサービスユニットを変換すると、convert-systemd-unitsツールは実際にOOMScoreAdjust=設定を次の呼び出しに変換しますoom-kill-protect

    #!/bin/nosh 

    oom-kill-protect -- -500

    プログラム 議論
    ボーナスでパラメータ化できます。
    oom-kill-protect——fromenv
    そして、サービス環境でパラメータの値を設定します(サービスに関連するenvdirから読み取ると仮定し、ここではrcctlnoshツールセットのshimを使用して動作します)。
    RCTLセットサービス名オーム保護-500

追加読書

  • ジョナサンデボインポラード(2016)。oom-kill-protect。 Nosh ツールセット。ソフトウェア。
  • ジェームズハントとクリントバイラム(2014)。 」oom score」。 ヌボリッチレシピ
  • レナート・ペトリング(2013-10-07)。 」OOMScoreAdjust..systemdの systemd.execマニュアルページ。 freedesktop.org.
  • ジョナサン・デ・ボーインポラード。rcctl。 Nosh ツールセット。ソフトウェア。
  • https://unix.stackexchange.com/a/409454/5132

答え2

これはUpstartと設定オプションを使用してUbuntuで可能ですoom score

oom score

Linuxには「メモリ不足」キラーツールがあります。 [...]

通常、OOMキラーはすべてのプロセスを同じように処理しますが、このセクションではカーネルがこの操作を異なる方法で処理することをお勧めします。

このセクションで提供される「tweak」値は、-999(OOMキラーによって終了される可能性が非常に低い)から1000(OOMキラーによって終了される可能性が非常に高い)の整数値です。 [...]

例:

# this application is a "resource hog"
oom score 1000

expect daemon
respawn
exec /usr/bin/leaky-app

答え3

MySQL自体をハッキングすることができますが(たとえばOpenSSHがsshdこれを行います)、ハードコアが多すぎて汚れています(更新の問題など)。

ラッパーまたは初期化スクリプトでこれを行うことができます。スコアは継承する必要があります(とにかくラッパーではこれをしたいかもしれませんexec mysqld "$@")。

使用cgroups- サービスを再起動すると、適切な設定を自動的に適用できるという点で、より柔軟性を提供し、永続的に維持します。たとえば、参照してください。cgroupを使用したアプリケーション優先順位の制御より多くの情報を知りたいです。必要なオートメーションを達成するには、次をご覧ください。libc グループには、cgroupのルールセットに基づいて実行されているプロセスの変更を動的に処理したり、ラッパーcgexec(同じパッケージ内)を使用できるデーモンが含まれています。

関連情報