当前位置:首页 > 运维 > 正文内容

linux中netstat和ss命令详解

phpmianshi5年前 (2016-04-11)运维126

由于nio的普及,ck10k的问题已经成为过去式。现在随便一台服务器,都可以支持数十万级别的连接了。


那么10万的连接需要多少资源呢?


由于一个连接都是文件句柄,所以需要文件描述符数量支持才行,每一个socket内存占用15k-20k之间,这样,仅维护相应socket,就需要20kx10万=2G内存;而广播一个1KB的消息需要占用的带宽为100M


如何查看当前系统有多少连接呢

查看当前系统的连接
[root@VM_0_15_centos ~]# netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'
LISTEN 13
ESTABLISHED 5
established) 1
Foreign 1
TIME_WAIT 5
但如果你在一台有上万连接的服务器上执行这个命令,你可能会等上很长时间。所以,我们有了第二代网络状态统计工具:netstat => ss

如果你在一台有上万连接的服务器上执行这个命令,可能会很卡。但是我们有了更好的替代方案ss命令

[root@VM_0_15_centos ~]# ss -s
Total: 252 (kernel 294)
TCP:   24 (estab 5, closed 6, orphaned 0, synrecv 0, timewait 4/0), ports 0

Transport Total     IP        IPv6
*         294       -         -        
RAW       0         0         0        
UDP       8         5         3        
TCP       18        15        3        
INET      26        20        6        
FRAG      0         0         0


下面我们详解2个命令的用法

1.netstat命令

netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口统计状态,无效连接,组播成员 等等。

netstat命令是net-tools软件包中的一员

选项:    
-a:  列出系统中所有网络连接,包括已经连接的网络服务、监听的网络服务和Socket套接字        
-t:  列出TCP数据
-u:  列出UDP数据    
-l:  列出正在监听的网络服务(不包含已经连接的网路服务)    
-n:  用端口显示服务,而不用服务名    
-p:  列出该服务的进程ID(PID)



2.ss命令


ss是Socket Statistics的缩写

ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但是ss的优势在于它能够显示更详细的有关网络连接的状态信息,而比netstat更快速、更高效。

ss命令是iproute2软件包中的一员


查看服务器上所有的socket连接

[root@dev logs]# ss -a
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   
LISTEN     0      128                     *:51204                    *:*       
LISTEN     0      64                      *:rsync                    *:*       
LISTEN     0      7                       *:svn                      *:*       
LISTEN     0      50                      *:mysql                    *:*       
LISTEN     0      50                      *:netbios-ssn                  *:*
查看TCP sockets,使用-ta选项
查看UDP sockets,使用-ua选项
查看RAW sockets,使用-wa选项
查看UNIX sockets,使用-xa选项


重点说明一下Recv-Q和Send-Q

在LISTEN和ESTAB状态分别代表不同意义。正常的应用程序这两个值都应该为0(backlog除外)。数值越大,说明问题越严重。

LISTEN状态
Recv-Q:代表建立的连接还有多少没有被accept,比如Nginx接受新连接变的很慢
Send-Q:代表listen backlog值
ESTAB状态
Recv-Q:内核中的数据还有多少(bytes)没有被应用程序读取,发生了一定程度的阻塞
Send-Q:代表内核中发送队列里还有多少(bytes)数据没有收到ack,对端的接收处理能力不强


和某个ip的所有连接

ss dst 10.66.224.130
ss dst 10.66.224.130:http
ss dst 10.66.224.130:smtp
ss dst 10.66.224.130:443

显示所有的http连接

ss  dport = :http

和某个ip的所有连接

ss dst 10.66.224.130
ss dst 10.66.224.130:http
ss dst 10.66.224.130:smtp
ss dst 10.66.224.130:443


显示所有的http连接

ss  dport = :http


查看连接本机最多的前10个ip地址

查看连接本机最多的前10个ip地址

netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c  | sort -n -k1 -r | head -n 10
netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c  | sort -n -k1 -r | head -n 10
查看TCP sockets,使用-ta选项
查看UDP sockets,使用-ua选项
查看RAW sockets,使用-wa选项
查看UNIX sockets,使用-xa选项

查看TCP sockets,使用-ta选项
查看UDP sockets,使用-ua选项
查看RAW sockets,使用-wa选项
查看UNIX sockets,使用-xa选项


3.net-tools   iproute2替换命令


net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。但自2001年起,Linux社区已经对其停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2

作为网络配置工具的一份子,iproute2的出现旨在从功能上取代net-tools。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快)


功能
net-tools (已过时)
iproute2
可用网络地址
ifconfig
ip addr
网络统计
netstat
ss
路由
route -n  / netstat -rn
ip route
ARP
arp
ip neigh
VPN
iptunnel
ip tunnel
vlan
vconfig
ip link
组播
ipmaddr /netstat -g
ip maddr
用途net-toolsiproute统计ifconfigss地址netstatip    addr路由routeip route邻居arpip neighVPNiptunnelip tunnelVLANvconfigip    link组播ipmaddrip maddr
用途net-toolsiproute统计ifconfigss地址netstatip    addr路由routeip route邻居arpip neighVPNiptunnelip tunnelVLANvconfigip    link组播ipmaddrip maddr



版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

linux中磁盘被占用找不到占用文件

1、用df 检查发现磁盘占用过高[root@VM_0_15_centos ~]# df -h2、用du检查发现各目录占用的空间都很少,有约10G的空间找不到了[root@...

记一次laravel项目因opcache导致的include过慢问题

问题表现 php-fpm-slow.log 大量如下日志:script_filename = /data/nginx/webroot/app-20200611-160330-feb...

内存分配堆与栈的区别

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:(1)程序内存布局场景下,堆与栈表...

Certbot-免费的https证书

什么是HTTPS?HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传...

dnsmasq搭建DNS服务器详解

Dnsmasq 简介Dnsmasq 是一个轻量级的 DNS 缓存、DHCP、TFTP、PXE 服务器。作为域名解析服务器,dnsmasq 可以通过缓存 DNS 请求来提高对访问过域名的解析速度。作为...

linux中配置内核参数sysctl详解

概念sysctl用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数。用户只需要编辑/etc/sysctl.conf文件,即可手工或...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。