linux os

使用iftop&netstat和nethogs命令排查解决Linux服务器流量异常

TheHuPost newsletter上线了, 欢迎大家订阅! 
对C++, Java,JavaScript,Python等编程语言有兴趣的,也可以看看编程语言. 
也欢迎大家来论坛与我讨论

最近发现本站The Hu Post 使用的Linux服务器流量异常, 这里记录下使用iftop&netstat和nethogs命令排查解决Linux服务器流量异常的过程, 顺便也总结下iftop, netstat和nethogs等几个工具的用法。

iftop

iftop介绍

在类Unix系统中可以使用top查看系统资源、进程、内存占用等信息。查看网络状态可以使用netstat、nmap等工具。若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop。

iftop是类似于top的实时流量监控工具, 官网请戳这里: iftop官网

iftop安装

以安装好EPEL, 可以直接通过命令安装

yum install iftop for Centos

apt-get install iftop for Debian

iftop使用

直接运行 iftop, 效果如下:

使用iftop&netstat和nethogs命令排查解决Linux服务器流量异常
iftop命令

iftop相关参数及说明

iftop界面相关说明

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

  • TX:发送流量
  • RX:接收流量
  • TOTAL:总流量
  • Cumm:运行iftop到目前时间的总流量
  • peak:流量峰值
  • rates:分别表示过去 2s 10s 40s 的平均流量

iftop相关参数

常用的参数

-i设定监测的网卡,如:# iftop -i eth1

-B 以bytes为单位显示流量(默认是bits),如:# iftop -B

-n使host信息默认直接都显示IP,如:# iftop -n

-N使端口信息默认直接都显示端口号,如: # iftop -N

-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24# iftop -F 10.10.1.0/255.255.255.0

-h(display this message),帮助,显示参数信息

-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

-b使流量图形条默认就显示;

-f这个暂时还不太会用,过滤计算包用的;

-P使host信息及端口信息默认就都显示;

-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

进入iftop画面后的一些操作命令(注意大小写)

按h切换是否显示帮助;

按n切换显示本机的IP或主机名;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按P切换暂停/继续显示;

按b切换是否显示平均流量图形条;

按B切换计算2秒或10秒或40秒内的平均流量;

按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;

按<根据左边的本机名或IP排序;

按>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。

netstat

netstat介绍

netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

netstat一般Linux 系统安装后就会带这个命令, 不需要单独安装

netstat输出信息描述

执行netstat后输出如下:

[root@root-frogs-2 ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:51574         localhost:6379          TIME_WAIT  
tcp        0      0 107.182.26.6.16cl:36758 183.93.99.177:48342     ESTABLISHED
tcp        0      0 107.182.26.6.16cl:29153 47.74.209.185:38554     ESTABLISHED
tcp        0      0 localhost:51572         localhost:6379          TIME_WAIT  
tcp        0      0 localhost:51576         localhost:6379          TIME_WAIT  
tcp        0    160 107.182.26.6.16cl:29153 161.117.188.158:48440   ESTABLISHED
tcp        0      0 107.182.26.6.16cl:https 183.94.82.65:61173      ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    12325    /run/systemd/shutdownd
unix  2      [ ]         DGRAM                    2018288  /var/lib/samba/private/msg.sock/24109
unix  2      [ ]         DGRAM                    2147343  /var/lib/samba/private/msg.sock/12410
unix  2      [ ]         DGRAM                    1153     /run/systemd/notify
unix  2      [ ]         DGRAM                    1155     /run/systemd/cgroups-agent
unix  2      [ ]         DGRAM                    2018834  /var/lib/samba/private/msg.sock/24118
unix  2      [ ]         DGRAM                    2018838  /var/lib/samba/private/msg.sock/24119
unix  2      [ ]         DGRAM                    2018844  /var/lib/samba/private/msg.sock/24123
unix  5      [ ]         DGRAM                    1166     /run/systemd/journal/socket
unix  17     [ ]         DGRAM                    1168     /dev/log
unix  3      [ ]         STREAM     CONNECTED     66211    
unix  3      [ ]         STREAM     CONNECTED     66193    
unix  3      [ ]         STREAM     CONNECTED     66208    
unix  3      [ ]         STREAM     CONNECTED     16687    
unix  3      [ ]         STREAM     CONNECTED     66172    
unix  3      [ ]         STREAM     CONNECTED     22337    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     66194    
unix  3      [ ]         STREAM     CONNECTED     47064    /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     47258    
unix  2      [ ]         DGRAM                    13231    
unix  3      [ ]         STREAM     CONNECTED     66220    
unix  3      [ ]         STREAM     CONNECTED     66217    
unix  3      [ ]         STREAM     CONNECTED     66175    
unix  3      [ ]         STREAM     CONNECTED     66218    
unix  3      [ ]         STREAM     CONNECTED     13259    
unix  3      [ ]         STREAM     CONNECTED     66215    
unix  3      [ ]         STREAM     CONNECTED     66173    
unix  3      [ ]         STREAM     CONNECTED     66214    
unix  3      [ ]         STREAM     CONNECTED     14405    
unix  3      [ ]         STREAM     CONNECTED     66212    
unix  3      [ ]         STREAM     CONNECTED     22338    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     13260    
unix  3      [ ]         STREAM     CONNECTED     13388    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     15938    /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     22335    
unix  3      [ ]         STREAM     CONNECTED     66221    
unix  3      [ ]         STREAM     CONNECTED     22336    
unix  3      [ ]         STREAM     CONNECTED     13228    
unix  3      [ ]         STREAM     CONNECTED     66209    
unix  3      [ ]         STREAM     CONNECTED     66191    
unix  3      [ ]         STREAM     CONNECTED     66230    
unix  2      [ ]         DGRAM                    14569    
unix  3      [ ]         STREAM     CONNECTED     18466650 
unix  3      [ ]         STREAM     CONNECTED     18466646 
unix  3      [ ]         STREAM     CONNECTED     66190    
unix  3      [ ]         STREAM     CONNECTED     12990    
unix  3      [ ]         STREAM     CONNECTED     66187    
unix  3      [ ]         STREAM     CONNECTED     18466647 
unix  2      [ ]         DGRAM                    17645661 
unix  3      [ ]         STREAM     CONNECTED     66188    
unix  2      [ ]         DGRAM                    14573    
unix  3      [ ]         STREAM     CONNECTED     66185    
unix  3      [ ]         STREAM     CONNECTED     12991    
unix  3      [ ]         STREAM     CONNECTED     17645671 /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     13057    
unix  3      [ ]         STREAM     CONNECTED     66229    
unix  3      [ ]         STREAM     CONNECTED     57528    /run/systemd/journal/stdout
unix  2      [ ]         DGRAM                    11633    
unix  3      [ ]         STREAM     CONNECTED     66184    
unix  3      [ ]         STREAM     CONNECTED     66227    
unix  3      [ ]         STREAM     CONNECTED     18466649 
unix  3      [ ]         STREAM     CONNECTED     17645670 
unix  3      [ ]         STREAM     CONNECTED     12216    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     66181    
unix  3      [ ]         STREAM     CONNECTED     13424    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     66182    
unix  3      [ ]         STREAM     CONNECTED     66179    
unix  2      [ ]         DGRAM                    12989    
unix  3      [ ]         STREAM     CONNECTED     18466648 
unix  3      [ ]         STREAM     CONNECTED     66169    
unix  2      [ ]         DGRAM                    47527    
unix  2      [ ]         DGRAM                    19959707 
unix  3      [ ]         STREAM     CONNECTED     18466651 
unix  3      [ ]         STREAM     CONNECTED     66178    
unix  3      [ ]         STREAM     CONNECTED     12135    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     15294    
unix  3      [ ]         STREAM     CONNECTED     18461938 /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     17645381 /var/run/dbus/system_bus_socket
unix  2      [ ]         DGRAM                    90057    
unix  3      [ ]         STREAM     CONNECTED     13433    
unix  3      [ ]         STREAM     CONNECTED     12262    
unix  3      [ ]         STREAM     CONNECTED     11628    /run/systemd/journal/stdout
unix  2      [ ]         DGRAM                    17646695 
unix  3      [ ]         STREAM     CONNECTED     854128   
unix  2      [ ]         DGRAM                    124306   
unix  3      [ ]         STREAM     CONNECTED     11626    
unix  3      [ ]         STREAM     CONNECTED     14054    /run/systemd/journal/stdout
unix  2      [ ]         DGRAM                    13427    
unix  3      [ ]         STREAM     CONNECTED     12215    
unix  3      [ ]         DGRAM                    12676    
unix  3      [ ]         DGRAM                    12675    
unix  3      [ ]         STREAM     CONNECTED     2018303  
unix  3      [ ]         STREAM     CONNECTED     12263    /run/systemd/journal/stdout
unix  2      [ ]         DGRAM                    65149    
unix  3      [ ]         STREAM     CONNECTED     17645380 
unix  3      [ ]         STREAM     CONNECTED     2018846  /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     14495    /var/run/dbus/system_bus_socket
unix  2      [ ]         DGRAM                    17484598 
unix  3      [ ]         STREAM     CONNECTED     17645654 /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     854127   
unix  2      [ ]         DGRAM                    12264    
unix  2      [ ]         DGRAM                    2018269  
unix  3      [ ]         STREAM     CONNECTED     66176    
unix  3      [ ]         STREAM     CONNECTED     14494    
unix  3      [ ]         STREAM     CONNECTED     17645652 
unix  3      [ ]         STREAM     CONNECTED     13434    /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     66197    
unix  2      [ ]         DGRAM                    66246    
unix  3      [ ]         STREAM     CONNECTED     66196    
unix  3      [ ]         STREAM     CONNECTED     66162    
unix  3      [ ]         STREAM     CONNECTED     18460965 
unix  3      [ ]         STREAM     CONNECTED     58634    
unix  3      [ ]         STREAM     CONNECTED     66205    
unix  3      [ ]         STREAM     CONNECTED     34835    /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     66200    
unix  3      [ ]         STREAM     CONNECTED     34834    
unix  3      [ ]         STREAM     CONNECTED     66224    
unix  3      [ ]         STREAM     CONNECTED     66202    
unix  3      [ ]         STREAM     CONNECTED     66158    
unix  3      [ ]         STREAM     CONNECTED     66199    
unix  3      [ ]         STREAM     CONNECTED     66159    
unix  3      [ ]         STREAM     CONNECTED     66166    
unix  3      [ ]         STREAM     CONNECTED     66226    
unix  2      [ ]         DGRAM                    2147363  
unix  3      [ ]         STREAM     CONNECTED     19728290 
unix  3      [ ]         STREAM     CONNECTED     66223    
unix  3      [ ]         STREAM     CONNECTED     66203    
unix  3      [ ]         STREAM     CONNECTED     66168    
unix  3      [ ]         STREAM     CONNECTED     66206    
unix  3      [ ]         STREAM     CONNECTED     66165    
unix  3      [ ]         STREAM     CONNECTED     19728291 
unix  3      [ ]         STREAM     CONNECTED     66161    

netstat的输出结果可以分为两个部分

1、Active Internet connections 有源TCP连接,其中”Recv-Q”和”Send-Q”指接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

2、Active UNIX domain sockets 有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

列名解释:

Proto:显示连接使用的协议。

RefCnt:表示连接到本套接口上的进程号。

Types:显示套接口的类型。

State:显示套接口当前的状态。

Path:表示连接到套接口的其它进程使用的路径名。

netstat常见参数

-a (all) 显示所有选项,默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

LISTEN和LISTENING的状态只有用-a或者-l才能看到。

常用netstat相关命令

1、列出所有端口 #netstat -a

2、列出所有 tcp 端口 #netstat -at

3、列出所有 udp 端口 #netstat -au

4、只显示监听端口 #netstat -l

5、只列出所有监听 tcp 端口 #netstat -lt

6、只列出所有监听 udp 端口 #netstat -lu

7、列出所有监听 UNIX 端口 #netstat -lx

8、显示所有端口的统计信息 #netstat -s

9、显示 TCP 或 UDP 端口的统计信息 #netstat -st-su

10、 输出中显示 PID 和进程名称 #netstat -p

11、netstat 输出中不显示主机,端口和用户名 (host, port or user)

当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

同样可以加速输出,因为不用进行比对查询。

netstat -an

如果只是不想让这三个名称中的一个被显示,使用以下命令

netsat -a --numeric-ports

netsat -a --numeric-hosts

netsat -a --numeric-users

12、持续输出 netstat 信息  #netstat -c

13、找出程序运行的端口 #netstat  -ap | grep ':80'

14、查看连接某服务端口最多的的IP地址(前20个)

netstat -nat | grep "10.1.62.23:443" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20

15、TCP各种状态列表 

netstat -nat |awk '{print $6}'

统计数量

netstat -nat |awk '{print $6}'|sort|uniq -c

排序

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

16、直接统计tcp数量监听的数量

netstat -ant | wc -l

nethogs

nethog介绍

NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。

NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组。NetHogs不需要依赖载入某个特殊的内核模块。如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况。这样就很容易找出哪个程序跑飞了然后突然占用你的带宽。

nethogs安装

yum install nethogs

nethogs使用

运行nethogs 命令, 结果如下:

使用iftop&netstat和nethogs命令排查解决Linux服务器流量异常
nethogs命令

nethogs命令介绍

nethogs交互命令

以下是NetHogs的一些交互命令(键盘快捷键)

  • m : 修改单位
  • r : 按流量排序
  • s : 按发送流量排序
  • q : 退出命令提示符

nethogs参数介绍

  • -V : 显示版本信息,注意是大写字母V.  
  • -v:切换显示单位,默认是默认是KB/s(0表示 KB/s,1表示KB,2表示B,3表示MB)
  • -c:检测次数(后面直接跟数字)
  • -a:检测所有的设备
  • -d : 延迟更新刷新速率,以秒为单位。默认值为 1.  
  • -t : 跟踪模式.  
  • -b : bug 狩猎模式 — — 意味着跟踪模式.  
  • -p : 混合模式(不推荐).  
  • device: 要监视的设备名称. 默认为 eth0  

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top