多个目录下使用WatchService的性能问题

6
我想使用Java的WatchService监听大量目录(数十万个),但我不确定它是否适用于如此多的被监视目录。
有没有人有使用WatchService处理如此多目录的经验?
如果有帮助的话,WatchService将在CentOS 6.5上使用EXT4文件系统。
谢谢,Mickael

只是好奇:那有什么应用?为什么有这么多目录? - Fildor
该应用程序将用于监控Asterisk创建的语音邮件目录。Asterisk有多个后端来存储语音邮件:文件系统、ODBC和IMAP。我对ODBC的性能有所担忧,所以我认为应该使用文件系统后端。 - manash
你有没有检查一下 Asterisk API,看看是否提供了这方面的事件? - Fildor
1
应该有些东西,我需要检查一下。不过,我仍然很想了解WatchService处理大量监视目录的能力。 - manash
1个回答

6
这种情况对于IDE来说相当常见。它们经常使用目录监视来处理复杂的目录结构和成千上万的文件。
需要注意两件事:
- 在Linux上,您经常需要调整操作系统以监视这么多文件。请参考https://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit - 为了防止出现这种情况,建议将监视限制(例如,512K)增加。您可以通过将以下行添加到/etc/sysctl.conf文件中来完成:
    fs.inotify.max_user_watches = 524288

这个例子调整了系统以监测512k文件。

  • 如果您有一个HDD,它不会让它旋转得更快,最可能的是其IOPS(每秒IO操作数)为80-120,这很可能是性能瓶颈,而不是您想要的。

和Java中的许多IO操作一样,它是在OS实际实现的设施的包装器周围运行的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接