背景:在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。 問題解決