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

时间:2015-09-15 11:56:50

标签: java netty nio

根据visualvm的采样器:

enter image description here

我是Netty的新手,但是当我分析一个Java应用程序时,似乎select()占用了self time的85%。但self time(CPU)只是一个很小的部分。因此,如果我正确理解self timeself time(CPU),则意味着select()只是一直在等待。服务器端代码是否正常?这么多等待会花费多少CPU使用量吗?我的服务器有12核CPU和2.4 GHz。这个java应用程序在top(像linux中的工具一样的taskmgr)中花费了近200%。

1 个答案:

答案 0 :(得分:3)

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

这符合您使用top对大约200%CPU使用率的观察。在12核系统上,200%对应于2/12,或占总可用CPU时间的约16%。假设您的系统上没有其他任何内容正在运行,则停机时间为(100-16),即大约84% - 即大致花费在select()上的时间,如visualvm所示。