5

我使用 Netty 构建了一个简单的 TCP 服务器,我想用 JMeter 对其进行基准测试。我正在使用 JMeter TCP 采样器,使用 BinaryTCPClientImpl 类名来发送字节。我检查了“无延迟”和“重用连接”。我假设这些是针对 SO_NODELAY 和 SO_REUSEADDR 的。我正在运行 75 个线程,每个线程执行 1000 个 TCP 请求。我一直看到大约 11% 的请求失败:

500 java.net.SocketException:软件导致连接中止:套接字写入错误

如果我取消选中“重用连接”,那么所有 75,000 个请求都会成功,不会出现一个错误,但吞吐量仅为原来的 33% 左右。

我需要对我的 Netty 服务器做些什么来防止这些错误吗?

4

1 回答 1

0

我应该注意我的服务器是这样工作的:接受连接,接收一些数据,发送一些数据,一旦发送数据就关闭连接。JMeter 文档说 TCP Sampler 会关闭连接,除非选中“重用套接字”,所以我猜这不是 SO_REUSEADDR。我假设在某些情况下客户端发送数据,接收数据,在服务器关闭套接字之前,客户端尝试再次发送数据,然后服务器关闭套接字并且 JMeter 认为请求失败。

因此,解决方案是不检查“重用地址”。关闭每个请求的套接字是预期的行为,因为我的客户端通信相对不频繁。

于 2012-05-14T21:22:01.783 回答