INotify max_user_instances 和 max_user_watches 之間到底有什麼區別?
在閱讀了網際網路上的一些文章後,我對理解 INotify max_user_instances和max_user_watches之間的區別有點迷茫。
來自官方 Linux 人:
/proc/sys/fs/inotify/max_user_instances
這指定了每個真實使用者 ID 可以創建的 INotify 實例數的上限。
和
/proc/sys/fs/inotify/max_user_watches
這指定了每個真實使用者 ID 可以創建的手錶數量的上限。
這是否意味著它
max_user_instances
是 INotify 程序的一個實例,它可以監視多個文件系統,並且限制由 指定max_user_watches
?如果前者是真的,它在實踐中是如何運作的?每個必須監視某些文件系統的程序都在創建 INotify 的使用者實例(我認為不是真的,因為它與使用者 ID 有關)?
目前,在 Amazon Ec2 實例上部署後,出現如下錯誤:
System.IO.IOException: The configured user limit (128) on the number of INotify instances has been reached.
如果我理解正確,創建的實例太多,正在監視文件系統更改?這可能是什麼原因?
“實例”是單個文件描述符,由
inotify_init()
. 單個 inotify 文件描述符可以由一個程序使用或由多個程序共享,因此它們是按使用者而不是按程序分配的。“watch”是一個單獨的文件,由 inotify 實例觀察。每隻手錶都是獨一無二的,因此它們也是按使用者配給的。
如果一個應用程序創建了太多的實例,它要麼啟動了太多的程序(並且不在程序之間共享 inotify 文件描述符),要麼它只是簡單的錯誤——例如,它可能會洩漏打開的 inotify 描述符(打開然後忘記它們關閉)。
還有一種可能性是,該應用程序編寫得不好,並且使用多個描述符就足夠了(您幾乎不需要超過 1 個 inotify 描述符)。
打開文件描述符可以通過 procfs 列出:
ls -al /proc/<application process number>/fd/
關於描述符的一些額外資訊可以在
/proc/<PID>/fdinfo/<descriptor number>
.