当前位置: 首页 > 知识库问答 >
问题:

WatchService使用CentOS上100%的CPU

尉迟宇定
2023-03-14

我在应用程序中使用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

共有1个答案

法池暝
2023-03-14

我在Ubuntu16.04上也遇到过同样的问题。

sudo apt-get install inotify-tools大大降低了我的资源使用率。不确定inotify-hookable是否也有帮助,但它附带了更多的依赖关系,所以如果inotify-tools不够的话,可以暂时不要这么做。

Thx由@Thomas Jungblut对此解决方案发表评论。

 类似资料:
  • 我有一个HttPURLConnection程序,它正在与运行在同一台机器上(本例中是CentOS)但部署在其他tomcat服务器上的某个应用程序建立连接。这意味着在部署在不同tomcats上的两个应用程序之间建立了HttpConnection,其中两个tomcats都运行在同一台机器上。 下面是我的代码: 然而,同样的代码在生产环境中运行得非常好,每秒大约有50个请求。 当我使用JVisualVM

  • 我在服务器上运行一个Java软件,24小时/天。今天早些时候(在服务器区域设置的午夜后几个小时检测到,这是值得注意的,因为它是本月的第一天),我收到了作为客户端连接到该软件的用户报告,称该软件突然变得不可用。JVM从未被中断或重新启动。它上一次重启是在几天前,从那以后它一直正常运行(使用大约5%或更少的CPU,这是正常的)。 这一次,当我检查该进程时,它实际上是在吞噬它可以从服务器上运行的其他应用

  • 问题内容: 引入了Java 7 以连续监视文件系统。Java 6是否有反向端口? 是否有具有类似功能的纯Java库? 问题答案: 当然是。ApacheVFS正是这样做的。您可以在http://commons.apache.org/vfs/下找到它。它是一个纯Java库,可以监视文件,并且非常易于使用: 上面的代码将监视文件c:/MyFile.txt。如果更改,则调用对象new MyListener

  • 这是我检查HAProxy状态时得到的错误: [root@localhost haproxy]#systemctl status haproxy.service:haproxy.service-haproxy负载平衡器 systemctl重新启动haproxy.service systemctl启用haproxy.service 将浏览器指向http://{IPADDRESS}/submanager

  • 这是来自太空的100%新的伊甸园--一个问题吗? 我的JAVA选项是:-xms10240m-xmx14336m-xx:permsize=192m-xx:maxpermsize=256m-xx:newsize=8192m-xx:maxnewsize=8192m-xx:-disableexplicitgc-xx:+useconcmarksweepgc-xx:cmsinitiatingoccupancy

  • 我对运行的节点进程所看到的情况感到有点困惑。主机上的显示容器使用了超过100%的CPU。这让我认为节点进程正在耗尽CPU。当我在主机上运行并看到节点进程使用了超过100%的CPU时,就确认了这一点。 当我跳入docker容器时,我看到该节点只使用了54%的CPU,并且处理在两个内核之间进行。我希望看到一个核心被最大化,另一个为0,因为Node是单线程的。 我发现了这个QA,看起来操作系统可能在内核