在CentOS上,WatchService占用了100%的CPU



我在应用程序中使用WatchService。当我在Windows环境上运行应用程序时,应用程序使用的CPU不到1%。当同样的应用程序在我的Linux服务器上运行时,它使用了100%的CPU。当WatchService线程被禁用时,CPU线程恢复正常。

我正在使用CentOS 5.9OpenJDK-1.7.0_x86_64

下面是线程:

private static void startDirectoryWatcher() {
    if (thWatcherM == null) {
        thWatcherM = new Thread(new Runnable() {
            @Override
            public void run() {
                if (mediaMode == MediaMode.Directory && !exit) {
                    File music = new File(path);
                    WatchService watcherM = null;
                    watcherM = music.toPath().getFileSystem().newWatchService();
                    music.toPath().register(watcherM, StandardWatchEventKinds.ENTRY_CREATE);
                    while (!exit) {
                        Thread.sleep(50);
                        if (watcherM != null) {
                            WatchKey watchKey = watcherM.take();
                            List<WatchEvent<?>> events = watchKey
                                    .pollEvents();
                            for (WatchEvent<?> event : events) {
                                if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
                                    System.out.println(event.context().toString());
                                }
                            }
                            if (!watchKey.reset()) {
                                break;
                            }
                        }
                    }
                    if (watcherM != null) {
                        watcherM.close();
                    }
                }
            }
        });
        thWatcherM.setName("Dir-Watcher-M");
        thWatcherM.start();
    }
}

为什么使用100%CPU ?

我在Ubuntu 16.04上遇到了同样的问题。

sudo apt-get install inotify-tools大大减少了我的资源使用。不确定inotify-hookable是否也有帮助,但它带来了更多的依赖关系,所以除非inotify-tools不够,否则可能会推迟。

感谢@Thomas Jungblut对这个解决方案的评论

相关内容

  • 没有找到相关文章

最新更新