相关疑难解决方法(0)

如何减少 TIME_WAIT 中的套接字数量?

Ubuntu 服务器 10.04.1 x86

我有一台在 nginx 后面带有 FCGI HTTP 服务的机器,它为许多不同的客户端提供许多小的 HTTP 请求。(高峰时段每秒大约 230 个请求,平均响应大小为 650 字节,每天有数百万个不同的客户端。)

结果,我有很多套接字,挂在 TIME_WAIT 中(使用下面的 TCP 设置捕获图表):

时间的等待

我想减少套接字的数量。

除了这个我还能做什么?

$ cat /proc/sys/net/ipv4/tcp_fin_timeout
1
$ cat /proc/sys/net/ipv4/tcp_tw_recycle
1
$ cat /proc/sys/net/ipv4/tcp_tw_reuse
1

更新:有关机器上实际服务布局的一些详细信息:

客户端-----TCP-socket--> nginx(负载均衡器反向代理) 
       -----TCP-socket--> nginx (worker) 
       --domain-socket--> fcgi-software
                          --single-persistent-TCP-socket--> Redis
                          --single-persistent-TCP-socket--> MySQL (其他机器)

我可能应该切换负载平衡器 --> 工作线程连接到域套接字,但关于 TIME_WAIT 套接字的问题仍然存在——我计划很快在单独的机器上添加第二个工作线程。在这种情况下将无法使用域套接字。

ubuntu nginx linux-networking high-load

41
推荐指数
1
解决办法
8万
查看次数

将 tcp_tw_recycle/reuse 设置为 1 的后果是什么?

我在配置文件中将 tcp_tw_recycle/reuse 都设置为 1。

这样做的后果是什么?

如果重复使用 tcp 套接字,是否会带来安全风险?即 2 个不同的连接都可能能够发送数据?

它适用于重新连接机会很小的短期连接吗?

ubuntu tcp socket

10
推荐指数
3
解决办法
2万
查看次数

Virtualbox HTTP 负载测试,主机 CPU 过载问题

我正在使用Virtualbox 4.1.8 虚拟化的 Debian Squeeze 6.0.4 x64 上运行的小型 Java EE 1.7.0 / Tomcat 7.0.26 应用程序进行 HTTP 负载测试基准测试(使用Apache BenchmarkSiege)。计算机主机是 Ubuntu 11.10 x64。

我在 Tomcat 中修改了这些参数server.xml

<Connector 
    port="8080" 
    protocol="HTTP/1.1"
    connectionTimeout="200000"
    redirectPort="8443" 
    acceptCount="2000"
    maxThreads="150"
    minSpareThreads="50" />
Run Code Online (Sandbox Code Playgroud)

在服务器上执行的应用程序大约需要 300 毫秒。

这个应用程序运行良好,直到达到一定数量的并发连接,例如:

ab -n 500 -c 150 http://xx.xx.xx.xx:8080/myapp/
ab -n 1000 -c 50 http://xx.xx.xx.xx:8080/myapp/
siege -b -c 100 -r 20 http://xx.xx.xx.xx:8080/myapp/ 
Run Code Online (Sandbox Code Playgroud)

socket connection timed out发生了很多事情,这使主机处理器完全过载(但 VM 内的 CPU 负载是正常的)。

htop在主机上执行一个操作,我可以看到 Virtualbox 进程在 300% CPU 下运行,并且即使在负载测试完成后也 …

debian tomcat java virtualbox load-testing

5
推荐指数
1
解决办法
1160
查看次数