コンピューティング目的でのみ小規模サーバー(Ubuntu 14.04)を運営しています。時々、ユーザーはシステムを停止するのに十分なメモリを消費します。前回は、メモリを大量に消費するサブプロセス30個を生成したプロセスが原因でした。その結果、問題を解決するためにコンピュータにログインできません。 SSHとローカルログインの両方がタイムアウトしました。 OOM Killerは何もしないようです。egrep -i 'killed process' /var/log/*
何も返されません。
この状況でコマンドラインアクセスを維持/取得する方法はありますか?
答え1
システムリソースの使用量を制限する方法があります。コマンドと使用法を
確認してください。どのグループがどれだけのリソースを持つことができるかを指定できるulimit
confファイルがあります。limits.conf
たとえば、confファイルに次のように指定した場合:
@developers soft nproc 20
@developers hard nproc 30
これによりdevelopers
、グループには30個のプロセスしか持たず、20個に達すると警告が表示されます。プロセス数を全体的に制限することもできますulimit -u 10
。この場合、ユーザーは10個のプロセスを実行できます。
ulimit -a
電流制限を表示するために使用されます。メモリを制限するには、を使用してみてくださいulimit -v
。
user@localhost:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256646
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 32768
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 32768
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
答え2
Mazが答えで述べたように、これが起こらないように対策を講じることができます。しかし、ボックスがどんな状況であっても、予期しない状況でも回復するためにウォッチャーが必要です。
Linuxでは、ウォッチドッグは定期的に「ping」を送信するプロセスであり、「ping」が受信されない場合はシステムがリセットされます。私が「ping」と言うのは、ネットワークICMPエコー要求ではなく、「こんにちは、私は生きています」というメッセージを意味します。 pingは、リセットを実行するためにホストを再起動するなどの操作を実行できる物理監視デバイスに送信できますが、Linuxカーネル内で動作することもできます。ハードウェア監視デバイスは通常、エンタープライズクラスのデバイスでのみ検出されるため、後者が最も望まれます。
とにかく起動するには、まずカーネルでソフトウェア監視機能を有効にする必要があります。これがおそらく最大の障害物でしょう。 Ubuntuで監視機能が有効になっているかどうかわかりません。利用可能かどうかを確認してください/dev/watchdog
。そうでない場合は試してくださいmodprobe softdog
。どちらも機能せずにこの作業を続けるには、SOFT_WATCHDOG
このオプションを使用してカーネルを再コンパイルする必要があります。
ウォッチドッグがアクティブであると仮定してインストールする必要があります。守る犬パック。
/etc/watchdog.d
インストールが完了したら、ヘルスチェックを実行するために使用するスクリプト(test-binary
でも利用可能watchdog.conf
)を挿入して実行可能にします。 SSHが正しく実行されていることを確認するには、次の手順を実行します。
#!/bin/bash
case "$1" in
test)
ssh testuser@localhost /bin/true
;;
repair)
service ssh restart
;;
*)
false
;;
esac
(上記の内容に正確に従うには、公開鍵認証を作成して設定する必要がありますが、testuser
これはこの回答の範囲外です。)
test
ウォッチドッグはヘルスチェックを実行し、失敗した場合に試みるスクリプトを呼び出しますrepair
。修理に失敗した場合、システムはリセットされます。
よりウォッチドッグ文書もっと学ぶ。