操作系統環境:
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前,需要我們採用有效的手段是跟蹤分析找到根本原因。我們技術人員的知識結構也要及時更新與完善。有不斷更新的知識結構,也有合適的問題跟蹤與分析方法,才有利於我們快速找到問題並解決問題。