Java netty select()怎么会花这么多时间呢?

Java netty select()怎么会花这么多时间呢?,java,netty,nio,Java,Netty,Nio,根据visualvm的采样器: 我不熟悉Netty,但当我分析一个Java应用程序时,似乎select()占用了自时间的85%。但是自时(CPU)只是一个非常小的部分。因此,如果我正确理解了self-time和self-time(CPU),这意味着select()一直在等待。服务器端代码正常吗?如此多的等待会花费大量的CPU使用吗?我的服务器有12个2.4 GHz的CPU核心。这个java应用程序在top(linux中类似taskmgr的工具)中花费了将近200%的成本。在select()中花

根据visualvm的采样器:


我不熟悉Netty,但当我分析一个Java应用程序时,似乎
select()
占用了
自时间的85%。但是
自时(CPU)
只是一个非常小的部分。因此,如果我正确理解了
self-time
self-time(CPU)
,这意味着
select()
一直在等待。服务器端代码正常吗?如此多的等待会花费大量的CPU使用吗?我的服务器有12个2.4 GHz的CPU核心。这个java应用程序在
top
(linux中类似taskmgr的工具)中花费了将近200%的成本。

select()
中花费的时间是应用程序的停机时间。应用程序似乎是多线程的,具有高度的并行性,一旦获得数据,CPU使用率就会非常高。但是,
select()
中的时间表示应用程序没有数据的时间,因此它在等待网络操作完成时被阻止


这与您使用
top
观察到的大约200%的CPU使用率相匹配。在12核系统上,200%对应于2/12,或总可用CPU时间的16%。假设您的系统上没有其他运行,则停机时间为(100-16)或大约84%,即大致相当于在
select()
中花费的时间,如
visualvm

所示,它将其大部分时间用于等待事件。这是正常的。@EJP这种等待会占用cpu吗?它说386ms,所以不会太多。@ThomasJungblut明白了。谢谢