Linux で異常に長いファイルロックを検出するにはどうすればよいでしょうか?

Linux で異常に長いファイルロックを検出するにはどうすればよいでしょうか?

私の Linux サーバーには、問題があります。多数のプロセスのうちの 1 つが 1 つのファイルにアクセスし、ランダムな時間にかなりの期間 (60 秒以上) にわたってそのファイルをロックします。その結果、他の処理が失敗します。

検出する方法はありますか?どのぐらいの間ファイルはどのプロセスによってロックされましたか?

答え1

あなたが探しているのはファイルだと思います/proc/locks。これはシステム内の現在のファイルロックを示しています。これは表示されませんファイルがロックされている期間、しかしそれはどのプロセスによっておそらく、このファイルにロックが登録されたことを検出し、経過時間を測定できるでしょう。サンプルは次のようになります。

cat /proc/locks 
1: POSIX  ADVISORY  WRITE 2245 08:06:1182714 1073741824 1073741824
2: POSIX  ADVISORY  WRITE 2245 08:06:1182714 1073741826 1073742335
3: POSIX  ADVISORY  WRITE 3058 08:06:10752740 0 0
4: POSIX  ADVISORY  WRITE 3058 08:06:10752739 0 0
5: POSIX  ADVISORY  WRITE 2421 08:06:10752766 0 EOF
6: POSIX  ADVISORY  WRITE 2421 08:06:11142048 0 EOF
7: POSIX  ADVISORY  WRITE 2421 08:06:9964366 1073741824 1073742335
8: POSIX  ADVISORY  WRITE 2421 08:06:11142040 0 EOF

列の場所は次のとおりです。

  • 初め: ロック #。
  • 2番: ロック タイプ (ロックが で作成された場合は POSIX fcntlFLOCKで作成された場合はflock.
  • 三番目: ロックモード (ADVISORY または MANDATORY)
  • 前方へ: ロック タイプ (WRITE または READ)。共有ロックまたは排他ロックに対応します。
  • 5番目: ロックを持つプロセスの PID。
  • 6番目:: ロックされたファイルを識別する、で区切られた 3 つの数字。
  • 7番目: ロックの開始バイト。
  • 第8:ロックの終了バイト

答え2

ロック ファイルが作成されたときのタイムスタンプを見るだけで、そのファイルがどれくらい古いかがわかります。同様に、「cat logfile.name」を実行すると、そのファイルの唯一の内容として、そのファイルを作成したプロセス ID が含まれることがよくあります。

関連情報