2009-02-11 15 views
27

我正在使用inotify監視文件事件的守護程序來訪問文件時觸發各種類型的事件。我已經讀過手錶有點貴,因爲內核正在存儲每個被監視文件的完整路徑名。什麼是Linux的inotify手錶的合理數量?

有多少手錶會太多?

編輯:大多數情況下,我想知道..如果是的話,你有沒有看到明顯的性能打擊,有多少手錶發生了?是的,我必須監視/遞歸(但是它是一個最小的引導系統)。

回答

17

AFAIK內核沒有存儲路徑名,而是存儲了inode。儘管如此,在32位系統上每個手錶有540個字節。在64bit上增加一倍。

我從Lsyncd知道(也許你想檢查一下嗎?)擁有一百萬枚手錶的人。它只吃了一個千兆字節的內存。

23

您可以通過閱讀/proc/sys/fs/inotify/max_user_instances(的inotify的「對象」最大數量)以及/proc/sys/fs/inotify/max_user_watches(最大文件數觀看)的系統限制,所以如果超過這些數字,這是太多;-)手錶的最大數量通常數以萬計或更高 - 在我的系統上,262143 - 除非您試圖在文件系統中觀看每個文件,否則這可能比您以前需要的要多,但您不應該那樣做。我會說,只是儘量不要使用更多的手錶,而不必擔心,除非你注意到性能顯着下降。

+1

爲什麼我不應該使用inotify觀看整個文件系統?你能具體嗎? – Blub 2014-05-06 06:59:12

+0

@Blub很好,你爲什麼要這樣做?除非你正在調試一個文件系統的實現,否則我想不出一個好的用例,如果這就是你正在做的事情,那麼最好掛鉤文件系統代碼本身。更不用說,inotify可能沒有足夠的手錶來實際觀看具有現代操作系統的文件系統上的_everything_。但我猜如果它確實如此(即,如果您正在處理一組縮減的文件),那可能不是最糟糕的事情。只要你的電腦可以處理它,它不會損害任何AFAIK。 – 2014-05-07 00:44:24

9

我的信息:

[[email protected] ~]# cat /var/log/lsyncd.status | grep Inotify 
Inotify watching 293208 directories 

[[email protected] ~]# cat /proc/sys/fs/inotify/max_user_watches 
1048576 

lsyncd使用的內存約130M。

我使用lsyncd使某些目錄與災難恢復服務器保持同步。

在主服務器上沒有性能損失/懲罰。