JMeter分布式测试出现java.net.SocketException: Broken pipe错误求助
JMeter分布式测试Broken pipe错误处理
分布式测试场景下,部分从机客户端出现请求执行不完整问题(例如发送10000个请求仅成功执行5000个),已排查/etc/ssh/ssh_config配置无异常,错误日志如下:
2023-02-07 17:35:55,125 ERROR o.a.j.s.BatchSampleSender: sampleOccurred java.rmi.MarshalException: error marshalling arguments; nested exception is: java.net.SocketException: Broken pipe (Write failed) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160) ~[?:?] at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:217) ~[?:?] at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:162) ~[?:?] at com.sun.proxy.$Proxy19.processBatch(Unknown Source) ~[?:?] at org.apache.jmeter.samplers.BatchSampleSender.sampleOccurred(BatchSampleSender.java:182) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.samplers.DataStrippingSampleSender.sampleOccurred(DataStrippingSampleSender.java:106) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.samplers.RemoteListenerWrapper.sampleOccurred(RemoteListenerWrapper.java:94) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.ListenerNotifier.notifyListeners(ListenerNotifier.java:58) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.notifyListeners(JMeterThread.java:1037) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:591) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.5] at java.lang.Thread.run(Thread.java:834) ~[?:?] Caused by: java.net.SocketException: Broken pipe (Write failed) at java.net.SocketOutputStream.socketWrite0(Native Method) ~[?:?] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110) ~[?:?] at java.net.SocketOutputStream.write(SocketOutputStream.java:150) ~[?:?] at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81) ~[?:?] at java.io.BufferedOutputStream.write(BufferedOutputStream.java:127) ~[?:?] at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1883) ~[?:?] at java.io.ObjectOutputStream$BlockDataOutputStream.writeByte(ObjectOutputStream.java:1921) ~[?:?] at java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1582) ~[?:?] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:352) ~[?:?] at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:293) ~[?:?] at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:155) ~[?:?] ... 12 more
可行解决方案
- 固定RMI端口并关闭SSL:修改JMeter配置文件
jmeter.properties,指定主机和从机的RMI本地端口避免冲突;若无需加密传输,关闭SSL减少通信开销client.rmi.localport=60000 server.rmi.localport=60001 server.rmi.ssl.disable=true - 调整采样发送策略:将
sample_sender改为DirectSampleSender(直接发送采样结果,不批量),或调大batch_sample_sender.max_size参数优化批量传输大小sample_sender=DirectSampleSender # 或调整批量大小 batch_sample_sender.max_size=1000 - 排查网络稳定性:检查主机与从机间的网络带宽、丢包率,确认无防火墙、负载均衡设备主动断开长连接
- 优化JVM内存配置:在从机的
jmeter启动脚本中调整HEAP参数,避免内存不足导致连接中断HEAP="-Xms2g -Xmx6g" - 升级JMeter版本:若使用旧版本(如5.5),升级至最新稳定版,修复已知的RMI通信相关bug
内容的提问来源于stack exchange,提问作者tolgagul
相关产品推荐
相关产品推荐

