rmi.transport.tcp.tcptransport Connectionhandler 消耗大量 CPU

Posted

技术标签:

【中文标题】rmi.transport.tcp.tcptransport Connectionhandler 消耗大量 CPU【英文标题】:rmi.transport.tcp.tcptransport Connectionhandler consumes much CPU 【发布时间】:2011-03-08 13:24:59 【问题描述】:

我正在运行一个第三方 RMI-Server 应用程序,只提供一种方法 ("getImage()" returns an image as byte[]). 这个方法的实现(通过 SOAP-WS 获取图像)由我提供。

运行这个 RMI-Server 的问题是 CPU 消耗高(用 jvisualvm 测量):65% 的 cpu 时间进入"sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()",而排在第二位的有 15% 是 "sun.net.www.http.KeepAliveCache.run()"。 “真正的”工作(缩放图像)排在第四位。 该服务器在win 2003 服务器上运行。我猜资源/连接处理有问题??但这是实现问题还是 Windows 配置问题?

另一个观察结果是:如果 cpu 利用率很高,内存利用率也会上升 - 问题是:这是因为 gc 无法完成它的工作还是有许多图像等待交付。我只能说内存用于byte[]

所以有什么想法吗?

提前谢谢

【问题讨论】:

【参考方案1】:

sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run() 是在编组参数之后和编组结果之前调用服务器中远程实现的方法。时间可能意味着通过线路将图像作为 RMI 结果返回比缩放图像需要更多时间。

【讨论】:

【参考方案2】:

我只能推测字节数组可能是图像,但它可能是任意数量的东西。

顺便说一句,您正在运行多核机器吗?我也遇到了这个问题,发现 VisualVM 指出了同样的罪魁祸首,即四核 Win7 机器上的 CPU 利用率约为 50%,而单核 WinXP 上的 CPU 利用率为 100%。我正在为服务器运行 Jetty。

抱歉,我还不能回答真正的问题,但希望在这里听到解决方案或能够很快在这里分享一个解决方案。既然您几个月前遇到了这个问题,也许您已经找到了一个并且可以分享?

【讨论】:

以上是关于rmi.transport.tcp.tcptransport Connectionhandler 消耗大量 CPU的主要内容,如果未能解决你的问题,请参考以下文章