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