请教下大家,用 ss -anutp |grep :53 |wc -l 得到了 1050 个连接, ESTABLISHED 状态。
其中 310 个是 Nginx ,剩余的都是 php-fpm 发起的。
随便举例一条
udp ESTAB 0 0 127.0.0.1:26076 8.8.8.8:53 users:(("nginx",4867,76))
uptime 目前已有 100 天。
Nginx 有反代 google , php 有 gethostbyname 与 gethostbynamel 。
现有这个连接存在的时间为免太长,而且复用率多高是个问题,有无什么解决办法规避这个情况?
谢谢!
把 Google 加到 hosts 里面试试,减少查询。
udp 不是无连接的吗
你可以考虑装个 bind 或者 dnsmasq 来做缓存,/etc/resolv.conf 写 127.0.0.1
注意只监听本地,否则就等着变成反射吧。
Google 根本不知道是哪个 ip ,有些 ip 反代了,功能就没了。所以无法。如果能 ip ,我就用 varnish 反代了。。。
鬼知道,我也奇怪
有这个想法,以前也弄过,不过后来因为 dns 更新不及时,又 pass 了
让 udp 快速消亡只能调整 timeout 吧,但这个 timeout 设置也不是越小越好,不然部分通讯会有问题。另外也有通过 limit 结合 reject 丢弃的,不过那种方法就会有抑制问题。目前 vps 上也是用 dnsmasq 用于 vpn 查询, drop 来自 wan 端的查询。
修改 /etc/sysctl.conf
net.netfilter.nf_conntrack_generic_timeout=600
net.netfilter.nf_conntrack_udp_timeout=65
net.netfilter.nf_conntrack_udp_timeout_stream=120
net.netfilter.nf_conntrack_tcp_timeout_established=600
net.netfilter.nf_conntrack_tcp_timeout_syn_sent=120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
net.netfilter.nf_conntrack_tcp_timeout_close=10
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
net.netfilter.nf_conntrack_tcp_timeout_last_ack=30
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=120
你这里面大部分都是 tcp 的。。。对 udp 有用么。。。
看来还是要用 dnsmasq...
我查看了下,默认 sysctl 已经定义好了这些值了
据我以前的经验, udp 在实现了一次会话之后,是会出现 establish 状态的,这也不是什么大问题
你机器为啥不用本地服务商提供的 DNS 呢,快得多,用 8888 干毛线
我是美国 VPS 。。。直连 ping < 1ms
我只是看到连接数过多,倒没觉得是大问题。
再说了,无论我用哪个都会有长连接。。
缓存时间可以调
额,你指什么? dnsmasq ?
这种所谓的连接命都不长