我已经部署了一个多层 Java 应用程序,并且不时看到应用程序中的作业因管道损坏和通道关闭错误而失败,类似于:
Caused by: java.nio.channels.ClosedChannelException
at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:125)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:294)
at com.common.connectionmanager.AsyncSocket$AsyncSocketOutputStream.write(AsyncSocket.java:466)
at java.io.DataOutputStream.writeInt(DataOutputStream.java:180)
和
2009-06-15 14:02:53,492 ERROR [com.ClientConnectionManager] [Socket (ClientConnectionManager.java:368) - Client connection error
com.ConnectionException: Error encoding message to stream
Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)
at sun.nio.ch.IOUtil.write(IOUtil.java:75)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:302)
at com.common.connectionmanager.AsyncSocket$AsyncSocketOutputStream.write(AsyncSocket.java:466)
at java.io.DataOutputStream.writeInt(DataOutputStream.java:180)
我认为这意味着我的两台服务器之间的网络连接暂时中断,并且这些错误告诉我服务器无法相互通信。
所有服务器都连接在1GBPS LAN上。
相关的服务器运行的是 Solaris - 有人可以推荐一些工具来监视它们之间的网络连接并发现它是否确实会不时中断吗?
答案1
运行平在合理的时间内进行测试。
ping 10.1.1.10 > 连接.txt
结果将位于文件末尾连接.txt。
10.1.1.10 的 Ping 统计信息:
数据包:已发送 = 53,已收到 = 53,丢失 = 0(0% 丢失),
近似往返时间(以毫秒为单位):
最短 = 0 毫秒,最长 = 0 毫秒,平均 = 0 毫秒
答案2
您没有提到这些服务器是如何连接的……LAN / WAN 等,这将对您从哪里开始进行故障排除产生巨大影响。如果是 LAN,请开始监控这些服务器插入的交换机接口,查找错误(可能是您的双工/速度设置错误),也许其中一个服务器一直请求自动协商,或者只是某个地方的电缆有问题。您还可能会看到由于普通拥塞而导致的超时 - 交换机上有一台受恶意软件感染的 PC / 您正在 10BaseT 上运行。
如果您要通过 WAN,请先使用 smokeping 之类的工具,它可以监控连接并告诉您何时以及多长时间丢失连接。如果您看到掉线,这可能是拥塞/连接不良/有人踩踏了您的 ISP 的电缆……可能是任何事情。
祝你好运。
答案3
我无法提供任何针对 Solaris 的建议,但与其通过 ping 或类似方式测试连接,您最好监视接口;如果连接断开,我想您会在日志中看到有关它的信息。