Articles of tcp

Apache Web服务器无法响应服务器状态,显示所有等待连接的subprocess

我的设置:我有3个几乎完全相同的networking服务器服务器相同的高负载的dynamic网站,简单的负载平衡的DNS。 这个服务已经使用了相同的apacheconfiguration工作了两年多了。 apache2,php5,ubuntu 8.04 linux 2.6.24-29-server 我的问题:大约两周后,我遇到了这个configuration的问题。 几乎每一天,我都有一个5分钟的小时间,其中网站是无法访问的。 我仍然可以通过SSHlogin到服务器。 如果我跑htop,我看到机器什么都不做。 我有大约1000个Apache进程运行,但没有CPU活动。 我已经使用Apache的mod_status来debugging这种情况。 进程记分牌看起来像这样: _C.___K_______________________R._______.__K_K____K___C_______.__ _______C__________.___________________________________.________C _.____K__________K___K_WK_____._K_____________________________._ W______K__________K________.____________________._______C_______ _C_.__K__K____.._.._____________________________________C_______ _R___________K___.______C________.C_________.______._____C______ ____________KKC____K_____K__WC_________________C_____.__.____.__ _____________________C_________K______.____C______._____________ _.___C____.___.___________________________.K______.____K________ W__.___________________C.__.____K________K_______R_._.__._______ __C__C_.__________C__C_______._____W______________C_.___C_______ ____.______C_____________C________.____C____________.________._K __.__________.K_____________K_________._____C____.K__________KW_ __K.W________R_________._______.___W___________.____.__K_____W__ W___.___..________W____K Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, "C" Closing connection, "L" Logging, "G" […]

如何使用tcpkill实用程序杀死TCP连接

我试图用tcpkill杀死ESTABLISHED TCP连接。 连接是一个开放的HTTPS连接。 它出现在netstat上: tcp 0 0 XXXX:55601 XXXX:https ESTABLISHED 所以,根据手册页 ,我input: $ tcpkill -i eth1 -9 port 443 tcpkill实用程序输出: tcpkill: listening on eth1 [port 443] 然后只是挂起 等了15分钟后,我不确定这里发生了什么事情。 我做错了什么?

自动重新连接TCP隧道

在两台机器之间有一个不可靠的networking连接:有时候活动的TCP连接因为我无法控制的原因而掉线。 我想在两台机器之间build立一个可靠的TCP连接 。 如果networking是可靠的,我只要运行ssh -L 1234:localhost:1234 remotehost ,服务器在远程主机上的端口1234上侦听,并将客户端指向localhost:1234 。 但是,如果SSH连接死亡,转发的连接也会死亡。 如何安排自动恢复客户端和服务器之间的连接? 非解决scheme: 这不适用于交互式应用程序,因此屏幕不适用。 这不仅仅是自动重新连接SSH隧道。 我想继续使用相同的隧道TCP连接,而不是启动一个新的连接。 原则上,一个虚拟专用网将会诀窍。 但是,当我只想要一个TCP连接时,似乎有点过分,我想要一个解决scheme,即使我没有任何一方的root权限。 我对一个叫做“ rocks ”的程序有点模糊的记忆,但是它似乎已经从networking上掉下来了。 我主要对Linux感兴趣(尽pipe我希望这个级别的程序可以移植到其他unices),但是如果你知道QNX和VMS之间的程序,那就更好了。

在“高延迟networking”上更好的TCP性能

我试图通过Linux机器之间的“高延迟networking”来提高TCP吞吐量。 我将tcp_mem , tcp_wmem和tcp_rmem为“8192 7061504 7061504”。 我将rmem_max , wmem_max , rmem_default和wmem_default为“7061504”。 我将netdev_max_backlog和txqueuelen设置为10000。 我将tcp_congestion_control设置为“可伸缩”。 我使用“nist”(cnistnet)来模拟100ms的延迟,BW I达到200mbps(没有延迟,达到约790mbps)。 我使用iperf来执行testing和TCPTrace来分析结果,这里是我得到的: 在接收端: 最高胜利:5294720字节 avg win adv:5273959字节 袋发送:0 在发件人方面: 实际数据字节:3085179704 rexmt数据字节:9018144 最大owin:5294577字节 avg owin:3317125字节 RTT最小值:19.2毫秒 RTT最大值:218.2毫秒 RTT avg:98.0 ms 为什么我只能达到200Mbps? 我怀疑“owin”与它有关,但我不确定(这些结果是2分钟的testing,1分钟的testing有1552900的“平均owin”)… 即使延迟为100ms,我预计吞吐量将近790mbps是错误的吗? (我尝试在窗口configuration中使用更大的数字,但似乎没有效果)

启用时间戳时,对某些SYN数据包没有响应

我有一台TCP服务器在运行Ubuntu 12.04.3(内核3.8.0-31-generic)的机器(“服务器”)上监听。 它从2个不同的客户端机器接收连接。 机器A运行Ubuntu 12.04.4(3.11.0-17-generic),机器B运行Ubuntu 11.10(3.0.0-32-server)。 如果服务器上启用了TCP时间戳(sysctl net.ipv4.tcp_timestamps = 1),则有时来自机器A的SYN数据包将被“忽略”。 在服务器上使用tcpdump(在非混杂模式下),我可以看到SYN到达OK并且有正确的校验和 – 没有响应 – 没有SYN / ACK,也没有RST。 在放弃之前,机器A重传SYN数次。 在机器A上运行的客户机软件(在这种情况下是wget)立即重新尝试一个新的连接并成功,获得即时的SYN / ACK。 机器B在同一台服务器上没有问题,而且stream量看起来很正常 – 它使用与机器A相同的TCP选项(从我从捕获文件中看到的)。 禁用服务器上的TCP时间戳会使所有事情都按照原样工作。 忽略的SYN数据包中的时间戳看起来对我来说是有效的,所以我不确定他们为什么会造成问题,或者它们是根本原因。 我已经把anonyimised pcap在这里https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap 。 在服务器(10.76.0.74)上显示机器A(10.4.0.76)成功执行HTTP GET(数据包1到10),然后在1秒后尝试再次获取相同的URL(数据包11到17),而是忽略了它的SYN。 数据包18到27是另一个成功的例子。 我怀疑这是一个类似的问题,“ 为什么服务器不会发送一个SYN / ACK数据包,以响应一个SYN数据包 ”,而禁用时间戳是一个解决方法,我想了解是怎么回事。 这只是一个错误? 没有本地防火墙运行。 服务器处理不lessTCP连接(每次约32K),但有大量的空闲内存/ CPU。 在pcap中显示的testing时间,机器A和服务器之间没有其他的TCP连接。 没有迹象表明服务器应用程序的接受队列突然被填满了(除此之外,这应该会影响两个客户端,我会假设)。 由于数据包在服务器上采用的pcap看起来不错,所以似乎并不是一个介入的networking设备正在破坏事物。 我原来在Ubuntu论坛上发布了这个,但事后看来这可能是一个更合适的位置。 希望借来一笔线索。

net.core.rmem_max和net.ipv4.tcp_rmem之间的差异

net.core.rmem_max和net.ipv4.tcp_rmem的第三个值有什么区别? 哪个具有较高的TCP连接优先级? 对于以下两个示例,tcp连接的最大缓冲区是多less? Case 1: sysctl -w net.core.rmem_max=7388608 sysctl -w net.ipv4.tcp_rmem='4096 87380 8388608' Case 2: sysctl -w net.core.rmem_max=8388608 sysctl -w net.ipv4.tcp_rmem='4096 87380 7388608'

我可以使TCP / IP会话运行less于60秒吗?

我们的服务器超载TCP / IP会话,我们有1200 – 1500。 他们大多数都挂在TIME_OUT状态。 事实certificate,处于TIME_OUT状态的连接占用一个套接字,直到经过60秒的超时。 问题是服务器无响应,许多客户端没有得到服务。 我做了一个简单的testing:使用Internet Explorer 8.0从服务器上下载一个XML文件下载在几秒钟内完成。 但后来我看到TCP / IP连接挂在TIME_OUT状态60秒。 有什么办法摆脱TIME_OUT等待,或者减less释放新连接的套接字? 我明白为什么TCP / IP连接进入TIME_OUT状态,但我不明白为什么Internet Explorer在XML文件下载结束后没有closures连接。 细节。 我们的服务器运行用Perl(mod-perl)编写的web服务。 该服务向客户提供天气数据。 客户端是一个Flash应用程序(实际上是embedded在Windows应用程序中的Flash ActiveX控件)。 操作系统:Ubuntu Apache“Keep Alive”选项设置为0

Linux上超过65536个TCP连接

我试图从Linux(RedHat5)框中设置超过65536个传出TCP连接。 我已经configuration了传出和接收框以允许足够的文件描述符。 我不相信接受方面有问题 – 我有多个目标框,每个有多个IP地址,我使用多个端口。 在传出方面,我不相信我每个IP地址的限制 – 我使用多个IP地址和端口(我打开连接从端口30,000 – 60,000为每个IP地址)。 有一些Linux内核可调参数我错过了吗? 或者TCP有一些根本的限制? 失败的是,我的应用程序打开连接挂在connect()调用。 感谢NickB的帮助

我如何利用内核2.6.33中的IW10?

我读过,2.6.33 +允许设置自定义的cwnd。 如果IW默认为10(对于所有的发行版,只有一些?) 如何看待当前的IW在特定的编译内核上? 引用: http://monolight.cc/2010/12/increasing-tcp-initial-congestion-window/ http://www.igvita.com/2011/10/20/faster-web-vs-tcp-slow-start/

为什么FIN_WAIT2状态下的连接没有被Linux内核closures?

我在一个长期的过程中遇到了一个问题: kube-proxy是Kubernetes的一部分。 问题是有时连接处于FIN_WAIT2状态。 $ sudo netstat -tpn | grep FIN_WAIT2 tcp6 0 0 10.244.0.1:33132 10.244.0.35:48936 FIN_WAIT2 14125/kube-proxy tcp6 0 0 10.244.0.1:48340 10.244.0.35:56339 FIN_WAIT2 14125/kube-proxy tcp6 0 0 10.244.0.1:52619 10.244.0.35:57859 FIN_WAIT2 14125/kube-proxy tcp6 0 0 10.244.0.1:33132 10.244.0.50:36466 FIN_WAIT2 14125/kube-proxy 随着时间的推移,这些连接会累积起来,从而导致stream程失败。 我已经向Kubernetes bug跟踪器报告了一个问题 ,但是我想知道为什么这样的连接没有被Linux内核closures。 根据它的文档 (searchtcp_fin_timeout),FIN_WAIT2状态下的连接应该在X秒后被内核closures,其中X可以从/ proc中读取。 在我的机器上它被设置为60: $ cat /proc/sys/net/ipv4/tcp_fin_timeout 60 所以如果我正确地理解这样的连接应该被closures60秒。 但事实并非如此,他们处于这种状态几个小时。 虽然我也明白,FIN_WAIT2连接是非常不寻常的(这意味着主机正在等待从连接的远程端可能已经消失一些确认)我不明白为什么这些连接不被系统“closures” 。 有什么我可以做的吗? […]