我使用Netty构建了一个简单的TCP服务器,我想用JMeter对它进行基准测试.我正在使用JMeter TCP Sampler,使用BinaryTCPClientImpl类名来发送字节.我检查过"没有延迟"和"重用连接".我假设这些是SO_NODELAY和SO_REUSEADDR.我正在运行75个线程,每个线程执行1000个TCP请求.我一直看到大约11%的请求失败了:
500 java.net.SocketException:软件导致连接中止:套接字写入错误
如果我取消选中"重用连接",那么所有75,000个请求都会成功而没有一个错误,但吞吐量只有它的33%.
我需要用Netty服务器来防止这些错误吗?
我应该注意我的服务器是这样工作的:接受连接,接收一些数据,发送一些数据,发送数据后关闭连接。JMeter 文档说 TCP Sampler 会关闭连接,除非选中“重用套接字”,所以我猜这不是 SO_REUSEADDR。我假设在某些情况下,客户端发送数据,接收数据,在服务器关闭套接字之前,客户端尝试再次发送数据,然后服务器关闭套接字,JMeter 认为请求失败。
所以,解决方案是不检查“重用地址”。关闭每个请求的套接字是预期行为,因为我的客户端通信相对不频繁。
归档时间: |
|
查看次数: |
1464 次 |
最近记录: |