根据visualvm的采样器:
我是 Netty 的新手,但是当我分析一个 Java 应用程序时,select()
似乎占用了 85% 的 self time
。但是self time(CPU)
只是非常非常小的一部分。因此,如果我正确理解 self time
和 self time(CPU)
,则意味着 select()
一直在等待。服务器端代码是否正常?如此多的等待会占用大量 CPU 资源吗?我的服务器有 2.4 GHz 的 12 核 CPU。此 java 应用程序在 top
(linux 中类似 taskmgr 的工具)中花费了近 200%。
最佳答案
在select()
中花费的时间是您的应用程序的停机时间。该应用程序似乎是多线程的,具有高度的并行化,一旦获取数据,CPU 使用率就会非常高。 select()
中的时间但是,表示您的应用程序没有数据的时间,因此它在等待网络操作完成时被阻塞。
这与您使用 top
观察到的大约 200% CPU 使用率相符.在 12 核系统上,200% 对应于 2/12,即总可用 CPU 时间的大约 16%。假设您的系统上没有其他任何东西在运行,停机时间为 (100-16),或大约 84% - 即大致花费在 select()
中的时间。 , 如图所示 visualvm
.
关于java - netty select() 怎么会花这么多时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32585480/