根据visualvm的采样器:
我是Netty的新手,但是当我分析一个Java应用程序时,似乎select()
占用了self time
的85%。但self time(CPU)
只是一个很小的部分。因此,如果我正确理解self time
和self time(CPU)
,则意味着select()
只是一直在等待。服务器端代码是否正常?这么多等待会花费多少CPU使用量吗?我的服务器有12核CPU和2.4 GHz。这个java应用程序在top
(像linux中的工具一样的taskmgr)中花费了近200%。
答案 0 :(得分:3)
在select()
中花费的时间是应用程序的停机时间。一旦获取数据,该应用程序似乎是多线程的,具有高度并行化和非常高的CPU使用率。但是,select()
中的时间表示应用程序不拥有数据的时间,因此在等待网络操作完成时会被阻止。
这符合您使用top
对大约200%CPU使用率的观察。在12核系统上,200%对应于2/12,或占总可用CPU时间的约16%。假设您的系统上没有其他任何内容正在运行,则停机时间为(100-16),即大约84% - 即大致花费在select()
上的时间,如visualvm
所示。