2014-12-14 12 views
5

Desidero utilizzare Java WatchService per ascoltare le modifiche su un numero elevato di directory (molte centinaia di migliaia) ma non so se è appropriato per un tale numero di directory guardate.Prestazioni di WatchService con molte directory

Qualcuno ha esperienza con WatchService con un tale numero di directory?

Se aiuta, il WatchService verrà utilizzato su CentOS 6.5 con un file system EXT4.

Grazie, Mickael

+0

Solo curioso: qual è l'applicazione di questo? Perché così tante dirs? – Fildor

+0

L'applicazione verrà utilizzata per monitorare le directory Voicemail create da Asterisk. Asterisk ha più backend per archiviare i messaggi vocali: file system, ODBC e IMAP. Ho paura delle prestazioni ODBC quindi ho pensato di utilizzare il backend del file system. –

+0

Hai controllato per qualche asterisco che forse fornisce un evento per questo? – Fildor

risposta

3

Questa situazione è abbastanza comune per gli IDE. Spesso usano la directory di sorveglianza per strutture di directory complesse e molti 10s di migliaia di file.

Ci sono due cose da notare:

Per evitare questa situazione, si consiglia di aumentare il limite di orologi (a, diciamo, 512K). Puoi farlo con l'aggiunta seguente riga al file /etc/sysctl.conf:

fs.inotify.max_user_watches = 524288 

Questo esempio sintonizza il sistema per monitorare i file 512K.

  • Se si dispone di un disco fisso, non ce la farà girare più velocemente ed è molto probabile che fa 80 - 120 IOPS (IO al secondo) e questo è più probabile che sia un collo di bottiglia che ti avrebbe fatto piacere.

Come molte operazioni di I/O in Java, è un wrapper attorno a una struttura effettivamente implementata dal sistema operativo.

Problemi correlati