背景:在nodejs項目中使用iotify監控配置檔案動态變化,配置檔案較多(幾千個配置檔案)。在測試機器運作時無報錯資訊,線上上機器執行失敗,報錯:terminate called after throwing an instance of 'InotifyException',其中,iotify模闆是自己使用c++寫的so打包成nodejs子產品。
追蹤過程:1,使用strace node app.js執行,來追蹤系統調用細節,發現錯誤:inotify_init() = -1 EMFILE (Too many open files)
2,檢視 ulimit -n,嘗試調大系統的檔案描述符限制,重新執行,還是失敗
3,google到一些資訊,嘗試sysctl fs.inotify.max_user_instances = 128 ; sysctl fs.inotify.max_user_watches = 8192。 問題解決