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

标签 java netty nio

根据visualvm的采样器:

enter image description here

我是 Netty 的新手,但是当我分析一个 Java 应用程序时,select() 似乎占用了 85% 的 self time。但是self time(CPU)只是非常非常小的一部分。因此,如果我正确理解 self timeself 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/

相关文章:

netty - 是否可以在同一个应用程序中使用 Netty 3.x 和 4.0,或者会不会有类名冲突?

Java watchservice,如何找到创建文件的目录?

java - 分页空间、JVM 和内存映射文件 (nio)

java - 关闭套接字唤醒选择器

java - 执行程序服务出现问题,列表大小始终为零?

java - 片段页面findViewByID无效

java - Echo Server并发1000个客户端(丢失消息+错误连接)

java - IBM Semeru和Adoptium有什么区别

java - Android 中的平滑 WiFi 切换

java - 在 TLS 重新协商期间更改 TrustManager 的接受发行者