Amazon-Ec2

INotify max_user_instances 和 max_user_watches 之間到底有什麼區別?

  • July 30, 2019

在閱讀了網際網路上的一些文章後,我對理解 INotify max_user_instancesmax_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>.

引用自:https://unix.stackexchange.com/questions/532709