背景
在实际工作中,特别运维职业过程中,查询服务器的TCP是一个必备的技能,比如在工作中,开发反馈某个IP连接不上每个服务器、某台服务器突然登录不上、或者开发提供一个IP+端口需要你查询这个IP是什么服务,等等。。。,这个时候查询服务器的TCP服务就显得尤为重要,下面就直接展示工作中实际运用的命令;
技术呈现
1、统计某个端口的连接数【8080为例】
netstat -ant|grep -i 8080 |wc -l
2、统计某个服务的连接数【tomcat服务为例】
ps -ef| grep tomcat | wc -l
3、统计已连接上本台服务器的主机,状态为"established"的个数
netstat -na|grep ESTABLISHED|wc -l
4、查看哪些服务器连接到本机
netstat -anlp
5、查看本机那台服务器连接最多【以此可以判断连接过来的机器的异常问题,作下一步分析】
netstat -anput | grep “ESTABLISHED” | awk ‘{print $5}’| awk -F: ‘{print $1}’ | uniq | sort
6、查询正在与本机进行TCP通信的服务器IP及连接个数
netstat -an | grep “ESTABLISHED” | awk ‘{print $5}’| awk -F: ‘{print $1}’ | sort | uniq -c
7、查询本机某个端口占用的进程【以80端口为例】
netstat anlp |grep 80 #根据端口可以查询到占用这个端口的进程的pid
ps -ef|grep pid #可以根据pid查询到具体的某一个进程
8、查询本机等待关闭的连接数
nestat anlp |grep TIME_WAIT |wc -l
9、查询本机等待关闭的连接数的具体地址
netstat -anlp |grep TIME_WAIT
TIME_WAIT过多的优化方法
发现服务器存在大量TIME_WAIT状态的连接,通过调整内核参数解决:
编辑文件:vim /etc/sysctl.conf
加入或修改以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
系统参数生效
/sbin/sysctl -p
参数说明:
net.ipv4.tcp_syncookies = 1 #表示开启SYN cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间;