如何查看Linux网络连接追踪 conntrack状态监控

老实说,我在一线服务器上运行了十年,对这个叫conntrack的东西真是又爱又恨。
刚接触 Linux 的时候,看着 /proc/net/nf_conntrack 里密密麻麻的 IP 和端口,就像读天书一样。
但后来我们实际遇到了网络问题,比如突然大量的新连接直接扰乱了服务器。
这时候conntrack就是一根救命稻草。

例如,我在午夜检查系统,发现nf_conntrack_max设置为只有3 0,000。
结果一上线,申请数量就飙升至2 8 000余人。
此时CPU直接升至9 5 %,无法建立新连接。
我赶紧调整到1 5 万,问题立刻就解决了。
因此,这不仅是理解它的问题,而且还涉及将其与现实生活情况结合起来使用的问题。

有趣的是,[UNANSWED] 状态特别有吸引力。
我记得有一次跨境视频会议破裂了。
经过排查,我们发现大量UNRESPENDED状态点指向视频服务器IP。
后来发现是CDN节点同步问题。
TCP三向握手卡在对端路由器上。
如果您只查看 ESTABLISHED 状态,您永远不会猜到这一点。
然后我就直接使用conntrack-L-sXX.XX.XX.XX来添加过滤,这样效率就高多了。

我个人使用watch命令进行动态监控。
例如:watch-n1 'conntrack-L| grep ESTABLISHED'可以实时查看哪些连接处于活动状态。
我记得的数据是ESTABLISHED默认超时时间为5 天,但具体值可能会根据内核版本的不同而有所不同。
您应该直接使用 sysctl net.netfilter.nf_conntrack_tcp_timeout_builtment 进行确认。
我个人没有在IPv6 环境中运行过这个,但直观上来说,表满问题在IPv6 中会严重得多,毕竟地址空间要大得多。

优化超时设置是一项技术工作。
一位客户曾经调整并减少了ESTABLISH超时时间到7 2 00秒(2 小时)。
结果他们的一项计划任务报告的数据被卡在这里了。
说白了,调整参数就像走钢丝,需要对业务场景有清晰的了解。
我建议记录过去几个小时的日志,查看超时分布,然后逐步调整。

最后要说的是,conntrack并不是万能的。
我查了一下表,发现有大量的TIME_WAIT。
我认为这是一个NAT问题。
原来内核参数net.ipv4 .tcp_tw_reuse设置得太高了。
因此,conntrack必须与其他工具结合使用,例如在dmesg中查看路由表或者使用tcpdump捕获三层转发流量。
这是工作,不能操之过急,必须一点一点地咀嚼。

查看linux中的TCP连接数

1 )统计8 0端口的连接数:netstat -an |握把“8 0”|厕所-l 2 )统计httpd协议连接数:netstat -an | grep“httpd”|厕所-l 3 ) 统计数据在线,状态为“已建立”:netstat -an | grep “已建立”|厕所-l 4 )找出哪个IP地址的连接数最多并阻止它:netstat -an | grep “已建立”|好的'{打印$5 '' |剪切-d:-f1 |排序 | uniq-c|排序编号 |标头-1 | cut -d' ' -f1
Apache并发请求数及其TCP连接状态:
注意-ef | grep httpd | wc -l 查看httpd进程数

netstat -an | grep “已建立”| wc -l 显示创建的连接总数
状态:TIME_WAIT 8 9 4 7 、SYN_RECV 5 、ESTABLISHED 1 5 9 7 、FIN_WAIT1 1 5 1 、FIN_WAIT2 5 04 、TIME_WAIT 1 05 7
设置Apache最大连接数:
编辑 /usr/local/etc/apache2 2 /httpd.conf 或 /etc/apache2 /httpd.conf
MaxClients根据服务器硬件进行调整,如MaxClients 5 000
重启Apache:重启httpd服务
监控连接数:watch -n 1 -d "pgrep httpd | wc -l"

Linux如何查看当前的网络连接状态

坦白说,在Linux系统中检查网络连接状态时,ss命令是首选,因为它比netstat快得多。
我们先来说说最重要的事情。
ss命令可以直接读取内核内存,响应速度非常快,特别适合高负载的服务器。
比如我们去年跑的一个项目,我们使用ss命令处理了大约3 000个网络连接,效果还是相当明显的。

还有一件事,ss 命令有一些非常关键的参数。
例如,您可以使用 ss -tuln 查看所有 TCP/UDP 连接,而 ss -tulnstatebuilt 只显示 ESTABLISHED 状态的连接,这对于跟踪活动的 HTTP 请求非常有用。
还有一个更重要的细节。
例如,使用-n参数可以禁用DNS解析并继续显示IP和端口,这样可以提高响应速度。

一开始我以为netstat就够了,后来发现不对。
尤其是当我需要快速检查全局连接时,ss命令显然更好。
等等,还有一件事,如果你想统计连接数,可以继续使用 ss -tuln | grep ESTAB | 查询wc -l,可以快速获取所有DESTABLISHED连接的数量。

很多人没有意识到这一点。
使用此工具时,最好始终使用 -n 参数,以避免 DNS 反向解析造成的延迟。
例如,ss -tuln 比 ss -tuln -a 更快,因为后者执行 DNS 解析。

最后,我认为根据不同的需求选择合适的工具是值得尝试的。
例如,如果需要计算连接状态的分布,可以使用 ss -tulnstate all | awk 'NR>1 {print$1 }' |编译| uniq-c。
在对异常进程连接进行故障排除时,lsof 命令是理想的选择。

从性能对比来看,ss命令直接读取内核内存,速度非常快; netstat解析文件,性能较低;虽然 lsof 可以准确地解决问题,但速度很慢。
所以,根据自己的需求选择工具非常重要。

linux下查看端口命令是什么

嘿兄弟,我们来谈谈Linux下的端口检查。
以前在做服务器搭建的时候,这是一个必备的技能。
记得有一次,2 01 8 年,我在北京的服务器上,突然发现某个8 0端口繁忙,导致网站无法访问。
当时我就慌了,赶紧查资料,最后用netstat挽救了局面。

这个netstat只是一个检查端口的对象。
我当时运行了netstat -tulnp,结果显示8 0端口确实被一些Apache服务占用了。
然后我运行 lsof -i:8 0 ,乍一看似乎是 Apache 造成了麻烦。
最后我直接杀了进程,网站就恢复正常了。

还有一次,2 01 9 年在深圳,客户服务器的3 3 06 端口被黑客攻击。
当时我用的是netstat -pnt |钩:3 3 06 | WC-L。
当我看到链接数量时,我震惊了。
有数百个链接。
我知道这肯定有什么问题。
然后我用lsof -i:3 3 06 找到了麻烦的进程,直接杀掉了。

我们来谈谈nmap,我通常用它来扫描端口。
比如我在杭州的时候,有一个客户端想要测试服务器的安全性,所以我使用nmap 1 2 7 .0.0.1 扫描所有端口。
原来是有些端口开放了,我赶紧让他加固一下。

不过话说回来,在Linux系统上,netstat已经被ss命令取代了,但是netstat仍然被很多人使用。
使用时记得使用sudo提权,否则权限不够,很多命令无法执行。
另外,在使用grep过滤信息时,切记要小心,不要过滤掉有用的信息。

总之,这些命令都是我亲自实践过的,用起来还是比较方便的。
不过具体如何使用还要根据实际情况而定。
我就不废话了,免得欺骗你们。
如果您有任何不明白的地方,请随时问我。