我正在运行第三方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()"
。 “真正的”工作(缩放图像)排在第4位。
服务器在win 2003服务器上运行。我想资源/连接处理有问题?但这是一个实现问题还是Windows配置问题?
另一个观察结果是:如果cpu利用率很高,内存利用率也会上升 - 问题是:这是因为gc无法完成其工作或许多图像等待传递。我可以说内存用于byte[]
。
所以任何想法该做什么?
事先提前答案 0 :(得分:0)
sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run()是在对参数进行编组之后和编组结果之前调用服务器中远程实现的方法。时间可能意味着返回图像作为RMI结果需要更多的时间,而不是缩放图像。
答案 1 :(得分:0)
我只能推测字节数组可能是图像,但它可以是任意数量的东西。
你正在运行多核机器吗?我也遇到了这个问题,发现VisualVM指出同样的罪魁祸首是四核Win7机器的CPU利用率约为50%,单核winXP的CPU利用率为100%。我正在为服务器运行Jetty。对不起我还不能回答真正的问题,但希望能在这里听到解决方案,或者希望能尽快在这里分享。几个月前你遇到过这个问题,也许你已经找到了一个并且可以分享?