web-dev-qa-db-ja.com

どのリソースを使用していますか?何がそれを止めることができますか?

Incrontabは、約を監視するように設定されています。 10ディレクトリ。唯一のことは、これらのディレクトリの1つで新しいファイルが受信されたときにBashスクリプトを開始することです。各dirで、約5分ごとに1つのファイルが受信されます。ただし、incrondが停止することがあります。それがいつ起こるかという規則はありません。それは週に数回から月に数回まで変化します。ログに記録されるエラーは次のとおりです。

incrond[35203]: *** unhandled exception occurred ***
incrond[35203]:   polling failed
incrond[35203]:   error: (11) Resource temporarily unavailable
incrond[35203]: stopping service

私は多くの情報を投稿していないことを知っています。しかし、システムは閉鎖されているので、私はできることを共有しました。私は直接の答えを探していません(質問が広すぎるかもしれないので)。研究できるア​​イデアを探しています。そのような行動の理由は何でしょうか?何を確認すればよいですか?どのリソースを確認する必要がありますか?

incrondはカーネルレベルのinotifyサブシステムを使用し、inotifyCベースのインターフェイスをC++コンテナにカプセル化します。 incrond source files を見ると、直面しているエラーは、incrond C++クラスにカプセル化されたファイル記述子のポーリングの失敗に関連しているようです。

int res = poll(ed.GetPollData()、ed.GetSize()、-1);  if (res > 0) {
    ed.ProcessEvents();
  }
  else if (res < 0) {
    switch (errno) {
      case EINTR:   // syscall interrupted - continue polling
        break;
      case EAGAIN:  // not enough resources - wait a moment and try again
        syslog(LOG_WARNING, "polling failed due to resource shortage, retrying later...");
        sleep(POLL_EAGAIN_WAIT);
        break;
      default:
        throw InotifyException("polling failed", errno, NULL);
    } 
  }

ポーリングが失敗した正確な原因を特定することは困難です。最も一般的な原因は次のとおりです。

  • 過負荷のシステム
  • 一部のincrond関数のクラッシュ/セグメンテーション違反

とにかく、監視対象のディレクトリの下にはいくつのファイルがありますか?

1
shodanshok

コマンドでstraceを使用してファイルにログを記録し、障害の発生に気付いた頻度に応じてログファイルをローテーションするように設定します。

たとえば、失敗したことがわかるまでに1週間かかる場合は、ログローテーションを7日(またはそれ以上)保持する必要があります。一般的に1時間以内に認識している場合は、6〜10時間のローテーションされた1時間ごとのログで十分です。

それと例の詳細: http://www.thegeekstuff.com/2011/11/strace-examples

0
TG2