Inotify数が制限またはファイル空間不足に達した異なる表現の同一本質原因分析


OS環境:
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 6.4(Santiago)
Release:       6.4
Codename:       Santiago
問題の表現:
最初の質問:
このマシンには、同じアプリケーションが複数配備されています.このアプリケーションはjava 7が提供するWatchService機能を使用します.同僚はログの中で以下のログの内容を発見しました.
30    2014 16:26:48,881 ERRORWorker-2  AdvancedWatchService:register - User limit of inotify watchesreached
java.io.IOException: User limit ofinotify watches reached
       at sun.nio.fs.LinuxWatchService$Poller.implRegister(LinuxWatchService.java:261)
       at sun.nio.fs.AbstractPoller.processRequests(AbstractPoller.java:260)
       at sun.nio.fs.LinuxWatchService$Poller.run(LinuxWatchService.java:326)
       at java.lang.Thread.run(Thread.java:722)

同僚の分析で見つけた原因はcat/proc/sys/fs/inotify/max_user_watchesパラメータ値制限による問題.このパラメータの値を増やす必要があります.
2つ目の質問:
また、同じマシンで同じユーザがtail<ファイル名>を実行してログファイルをリアルタイムで表示すると、次のエラーメッセージが表示されます.
tail:    "01000211.log":       

トレースの問題を「strace-fTittt tail-f 01000302.log>$HOME/strace 2.log 2>&1」コマンドで再現します.
ログには、次の重要な情報が表示されます.
1404867279.958627 [      37eaae8fa7] inotify_add_watch(4,"01000302.log", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = -1ENOSPC (No space left on device) <0.000042>
ログから見ると、tailはファイルの変化を監視し、データをリフレッシュする際にinotify_に使用します.add_watch.tailコマンドがパラメータfを指定した場合、ストリームはファイル変化モニタリング要求を登録した.モニタリングリクエストの登録に失敗すると、スペースが不足する現象が発生します.
小結
上の2つの問題には異なる表現があるが、問題の実質は同じである.問題のroot causeを見つける前に、有効な手段を採用する必要があるのは、根本的な原因を追跡分析することです.われわれ技術者の知識構造もタイムリーに更新し、完備しなければならない.絶えず更新される知識構造があり、適切な問題追跡と分析方法もあり、問題を迅速に見つけ、問題を解決するのに役立ちます.