我们有两个应用服务器即。 s1 和 s2。
对于到达 s1 的每个请求,它都会调用 s2 公开的服务。
s1 在端口 8585
上运行,s2 在端口 8989
- 我们在 s1 上实现了 Http 连接池,因此在与 s2 通信时将重新使用连接。为此,我们使用 apache httpclient 库和 PoolingHttpClientConnectionManager 进行连接轮询。
- HttpClient 实例仅在启动时创建一次,并在调用 s2 公开的服务时共享。
- 在创建 HttpClient 时,我们将 HttpClient 最大连接数配置为 50
如何检查连接轮询是否正常工作?
我们在 s2 中添加了 10 秒的延迟,因此每个请求都在等待 10 秒才能获得响应。
我们正在尝试使用 Jmeter 向服务器 s1 生成 200 个并发请求,并按照 netstat 命令检查服务器 s1 到 s2 建立的连接数
while [ 1 ] ; do netstat -apnt | grep -E '8585.*ESTABLISHED' ;echo "---";sleep 3; done
它给出了随机行为。 有时连接计数显示 100,有时显示 65 或任何其他数字。
最佳答案
用 awk“确定”你的 netstat 输出:
netstat -antp | awk '$6 == "ESTABLISHED" { split ($5,prt,":");if ( prt[2] == "8585" ) { cnt++ } } END { print cnt }'
这将获取 netstat 输出,然后检查第 6 个分隔数据(使用默认空格)并根据 ESTABLISHED 检查它。如果满足条件,则使用 : 将第四个定界数据拆分为数组端口。此的第二个元素将具有连接端口,因此将根据 8585 进行检查。如果满足此条件,则连接计数将增加。在 awk 脚本的末尾,打印了最终的 cnt 变量。
关于java - 检查与服务器的 TCP 连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45052215/