我有一个应用程序,客户端通过基于TLS / SSL的简单TCP协议连接到服务器。 在开发过程中,在我们构build应用程序的过程中,这已经运行了好几个月。 最近,当我们准备启动时,我已经提前将HAProxy添加到混合中,以便实现一些负载分配的顺序。 从技术上讲,一切都是有效的,但问题是,客户现在看到了完全随机的超时。 它们通常不一致,但发生时间大约为60秒。 有时会在25秒后发生。 haproxy转发TCP连接的服务器来通知并做一个干净的断开连接,问题是你不希望大量的同时连接中断和重新连接,没有任何理由反复。 除了其他方面之外,这对我们的发布/订阅基础设施也有影响。 客户很聪明,可以马上重新连接 – 但是这不是我们想要的行为。 负责通过SSL接受这些TCP连接的服务器不需要保持活动状态。 我将继续,并假设有一些隐含的价值,我没有看到我的HAProxyconfiguration造成这些随机超时,或需要一个TCP保持活着的东西。 事实上,超时并不总是一致的,但是,让我怀疑,否则。 如果每一次我都相信这是一个configuration问题,那么这个点就是60秒。 在这种情况下,并不总是60秒。 以下是我现在的configuration: global stats socket /home/haproxy/status user haproxy group haproxy log 127.0.0.1 local1 info # log 127.0.0.1 local5 info maxconn 4096 ulimit-n 8250 # typically: /home/haproxy chroot /home/haproxy user haproxy group haproxy daemon quiet pidfile /home/haproxy/haproxy.pid defaults log […]
我有一个运行TCP连接的游戏服务器。 服务器随机断开用户。 我认为它与服务器的TCP设置有关。 在本地开发环境中,编写代码可以处理超过8000个并发用户,而不会有任何断开或错误(在本地主机上)。 但在实际部署的Centos 5 64位服务器中,服务器独立于并发tcp连接数量创build这些断开连接。 服务器似乎无法处理吞吐量。 netstat -s -t IcmpMsg: InType0: 31 InType3: 87717 InType4: 699 InType5: 2 InType8: 1023781 InType11: 7211 OutType0: 1023781 OutType3: 603 Tcp: 8612766 active connections openings 14255236 passive connection openings 12174 failed connection attempts 319225 connection resets received 723 connections established 6351090913 segments received 6180297746 segments send out […]
某些数据包没有到达目标主机,我有一个很奇怪的问题。 当我们传送比MTU稍大的POST时,就会发生这种情况。 我们可以用这个脚本重现它: #!/usr/bin/python import urllib2 magic_length = 2297 logurl = 'http://www.example.nl/' data = (magic_length – len(logurl)) * 'X' headers = {'content-type': 'application/x-www-form-urlencoded', 'User-Agent': 'Fake'} request = urllib2.Request(logurl, data, headers) handler = urllib2.build_opener(urllib2.HTTPHandler()) answer = handler.open(request, timeout=5) 发送方没有收到ACK并重传。 接收方从来没有看到它。 这取决于你在哪里运行脚本,以及你在哪里发布。 我的家庭连接是失败的(顺便说一下,自从几个月以来,我一直有AJAX POST的问题,因为我有一个新的调制解调器)。 如果我将发送机器的MTU减less100,那么它再次工作。 但是,如果我把magic_length减less100,它magic_length失败。 第一个理论是,我的一层ADSL(如PPPoA)添加了报头,导致数据包被错误地分割,但似乎并不是这样。 也许MTU发现出了问题。 有些跳线阻止所有的ICMP也许? 这是从我家到谷歌的traceroute的第一部分: traceroute to google.com (74.125.133.102), 30 hops max, […]
上周我们的一台映像服务器遇到了一些麻烦,需要一些帮助。 查看我们的munin监测图: 我们正在运行debian squeeze,我们有很多的要求,因为这是我们的图像服务器之一。 我们不使用保持活力(也许我们应该,但这是另一个话题) 这些数字是我们的日志文件每分钟的请求数量: 17:19:66516 17:20:64627 17:21:123365 17:22:111207 17:23:58257 17:24:17710 … 等等 所以你看,我们有很多请求每分钟,但由于大多数请求在0-1ms服务,一切运行良好。 现在,如你所看到的,在我们的图片中,munin没有设法连接到这个在munin端口上的服务器,并询问相关的数字。 连接只是失败。 由于服务器没有任何手段(CPU,内存,networking)过载。 它必须与我们的防火墙/ tcp堆栈有关。 当时这个munin插件没有连接,我们在100MBit的连接上只有17MB的input和输出stream量。 你经常在这里有65k的tcp连接的限制,但这通常是误导的,因为它指的是16位的tcp头,并且属于每个ip /端口组合的65k。 我们的time_wait超时设置为 net.ipv4.tcp_fin_timeout = 60 我们可以降低这个以降低更多的TIME_WAIT连接,但是首先我想知道什么限制了networking的可达性。 我们使用iptables和状态模块。 但是我们已经提出了max_conntrack参数。 net.ipv4.netfilter.ip_conntrack_max = 524288 有没有人知道下一周要看什么内核参数或如何诊断这个问题呢?
该命令以字节为单位显示tcp receive buffer大小。 $ cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4001344 其中三个值分别表示最小值,默认值和最大值。 然后我试着用tcpdump命令findtcp window size 。 $ sudo tcpdump -n -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn and port 80 and host google.com' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 16:15:41.465037 IP […]
大家好,我们知道,3.x内核有更高的TCP默认连接值,比如initcwnd和initrwnd。 对于2.x的朋友,有没有办法在/etc/sysctl.conf中设置这些而不是ip route方式? 而不是以下: sudo ip route change default via 192.168.1.1 dev eth0 proto static initcwnd 10 有没有办法在/etc/sysctl.conf中设置相同的? 谢谢
我正在尝试研究以下情况下负载平衡长时间运行的TCP连接的最佳方法: 我们有多台服务器在一组冗余的防火墙之后,并且客户端build立长期运行(通常是10-15小时)的TCP连接到我们的后端服务器。 目前,“负载均衡”是通过客户端循环方法处理的,通过一系列IP地址,这些IP地址全部驻留在我们的防火墙中,并相应地NAT到后端服务器。 我想摆脱这种方式,只有一个公共IP,并有一个单独的负载平衡器,可以检查服务器的健康/负载,并相应地分配传入的客户端连接请求。 这里的一个问题是,每个客户端在3个不同的端口上build立3个套接字连接,我更喜欢这些连接是“粘性”的,所以这3个连接请求都发送到同一个后端服务器。 我一直在看例如HAProxy,但我不确定是否真的适合我的情况。 我们有一个相对较低的连接数(~300个客户端*每个3套接字连接)。 通常我们会看到每个sockets的连续数据传输量〜15KB / s。 任何input这是非常感谢! 谢谢, 汤姆
我的服务器(一个linode VPS)昨天突然开始超时。 我在networking方面相当缺乏经验,并且很想学习debugging这些连接问题的过程。 让我感到困惑的是,昨天有些人(我的电话,我在家里,在家里的朋友)可以一直访问这个站点,我用netstat看到一个连接已经build立。 我禁用了firwalls并设置了iptables来接受所有连接,以排除任何将我们的IP列入黑名单的奇怪的自动规则。 我不知道它的相关,但本地networking的跟踪路由超时 – 从一些外部的机器traceroutefind我的服务器。 我已经确认各种设置是正确的,通过比较我的开发服务器上正常运行的设置。 以下文件与我的开发环境相匹配(各自的IP地址除外): /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/networking/interfaces ifconfig Apache正在端口80上进行侦听,安装看起来和我运行的服务器完全一样。 # server that doesn't work: tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22008/apache2 tcp 0 0 69.164.201.172:80 71.56.137.10:57487 SYN_RECV – # server that does work tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3334/apache2 tcp 0 0 72.14.189.46:80 71.56.137.10:57490 ESTABLISHED 20931/apache2 我试图理解 […]
我正在看wireshark中的一些随机stream量,并碰到这个(使用相对seq / ack数字): 1. myIP -> 74.125.227.96 [SYN] seq=0 2. 74.125.227.96 -> myIP [SYN/ACK] seq=0 ack=1 3. myIP -> 74.125.227.96 [ACK] seq=1 ack=1 4. myIP -> 74.125.227.96 [ACK] seq=1 ack=1 len=14600 5. 74.125.227.96 -> myIP [ACK] seq=1 ack=2921 6. 74.125.227.96 -> myIP [ACK] seq=1 ack=5841 7. myIP -> 74.125.227.96 [ACK] seq=14601 ack=1 len=8760 8. 74.125.227.96 […]
在公司networking中,我注意到所有被检查的Windows Server 2012机器都启用了ECN : > netsh interface tcp show global TCP Global Parameters ———————————————- … ECN Capability : enabled 它在Windows Server 2012上默认打开吗? 在所有较旧的Windows系统上,我都看到它在默认情况下被closures,这在维基百科文章中得到确认。 1我无法在任何地方find有关Windows Server 2012的信息。 虽然ECN RFC于2001年发布,但仍有许多设备和互联网服务与ECN无法正常工作。 Windows中的这种变化会有点勇敢。