Inotify數達到限制或文件空間不足的不同表現同一本質原因分析

操作系統環境:

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

問題表現:

第一個問題:

     在此機器上部署了多個同樣的應用程序。此應用程序使用java7提供的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.proce***equests(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參數值限制引發的問題。需要增加此參數值。

第二個問題:

另在同一臺機器同一個用戶執行tail  –f <文件名>實時查看某日誌文件時,出現了下列錯誤提示:

tail:無法監視"01000211.log":設備上沒有空間

    我通過命令“strace -fTittt  tail -f  01000302.log >$HOME/strace2.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時,遊註冊了文件變化監測請求。在監測請求註冊失敗時就出現所看到空間不足的現象。

小結

    上面兩個問題有不同的表現,但問題實質是同一種。在我們找到問題的root cause前,需要我們採用有效的手段是跟蹤分析找到根本原因。我們技術人員的知識結構也要及時更新與完善。有不斷更新的知識結構,也有合適的問題跟蹤與分析方法,才有利於我們快速找到問題並解決問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章