起因:服务器外网带宽占用一直非常高,没有人使用时也在80%以上
最终找到问题,把对应的外网IP换成内网IP,性能变化如下图
阿里云的处理方法如下:
Linux系统中有各种查看网络流量的工具,比如sar、iftop、nethogs等,它们可以从不同的纬度来分析系统中流量信息,本文介绍如何使用sar、iftop、nethogs查看Linux系统ECS实例中网络流量负载情况。
操作场景
在您使用Linux系统的ECS实例过程中,可能会遇到实例带宽过高的情况,您可以按照以下步骤排查定位具体问题。
-
找到影响带宽使用率过高的具体进程。
您可以使用sar、iftop、nethogs等工具定位具体进程。更多信息,请参见sar工具的使用、iftop工具的使用或Nethogs工具的使用。
-
排查影响带宽使用率过高的进程是否正常,并分类进行处理。
-
对于正常进程:您需要对服务器的带宽进行升级。具体操作,请参见包年包月实例修改带宽或按量付费实例修改带宽。
-
对于异常进程:您可以手动对进程进行查杀,也可以使用第三方安全工具进行查杀。
-
sar工具的使用
sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告。sar可以从网络接口层面来分析数据包的收发情况、错误信息等。
sar命令
使用sar来监控网络流量的常用命令如下所示。
sar -n DEV [interval] [count]
说明
[interval]表示统计间隔,[count]表示统计次数。
使用示例
执行如下命令,使用sar每1秒统计一次网络接口的活动状况,连续统计5次。
sar -n DEV 1 5
命令执行后会列出每个网卡5次的平均数据取值,根据实际情况来确定带宽跑满的网卡名称,对于ECS实例来说,通常内网网卡为eth0,外网网卡为eth1。
系统显示类似如下,确认是eth1通过流量较大,然后执行以下步骤检查具体问题。
显示结果主要字段说明
-
IFACE:网络接口名称。
-
rxpck/s、txpck/s:每秒接收或发送的数据包数量。
-
rxkB/s、txkB/s:每秒接收或发送的字节数,以kB/s为单位。
-
rxcmp/s、txcmp/s:每秒接收或发送的压缩过的数据包数量。
-
rxmcst/s:每秒接收到的多播数据包。
iftop工具的使用
iftop是Linux系统中一个免费的网卡实时流量监控工具,可以监控包括指定网卡的实时流量、端口连接信息、反向解析IP等信息。
iftop命令
iftop常用命令如下。
iftop [-i interface]
interface表示网络接口名,比如eth0、eth1等。如果不通过-i参数指定接口名,则默认检测第一块网卡的使用情况。
使用示例
-
远程连接Linux系统的ECS实例。
具体操作,请参见连接方式概述。
-
执行如下命令,安装iftop流量监控工具。
yum install iftop -y
-
执行如下命令,查看详细端口流量占用情况。
iftop -i eth0 -P
说明
-P参数会显示请求端口。
系统显示类型如下,58690端口占用流量最大。
-
执行如下命令,查看端口对应的进程。
netstat -tunlp |grep [$Port]
说明
[$Port]为上一步查看的端口。
系统显示类型如下。
-
确认对应服务后,您可以通过停止服务或使用iptables服务来对指定地址进行处理。
例如屏蔽IP地址或限速,以保证服务器带宽能够正常使用。
显示结果主要字段说明
-
第①部分:带宽使用情况。
-
第②部分:外部连接列表,即记录了哪些IP正在和本机的网络连接。
-
右侧部分是实时流量信息,分别是该访问IP连接到本机2秒、10秒和40秒的平均流量。
-
=>
表示发送数据,<=
表示接收数据。
-
-
第③部分。
-
第一列:TX表示发送流量,RX表示接收流量,TOTAL表示总流量。
-
第二列cum:表示第一列各种情况的总流量。
-
第三列peak:表示第一列各种情况的流量峰值。
-
第四列rates:表示第一列各种情况2秒、10秒、40秒内的平均流量。
-
常见操作命令参数说明
进入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:退出。
Nethogs工具的使用
Nethogs是一款开源的网络流量监控工具,可用于显示每个进程的带宽占用情况。这样可以更直观定位异常流量的来源。Nethogs支持IPv4和IPv6协议,支持本地网卡及PPP连接。Nethogs工具的安装方法请参阅其官方帮助文档,本文不再详述。安装完毕,直接输入nethogs启动工具即可。不带任何参数时,Nethogs默认监控eth0。用户可以通过ifconfig等指令核实具体哪个网络接口(eth1、eth0)对应公网网卡。
Nethogs命令
常见用法如下。
nethogs [-i interface]
interface表示网络接口名,比如eth0、eth1等。如果不通过-i参数指定接口名,则默认检测第一块网卡的使用情况。
使用示例
-
远程连接Linux系统的ECS实例。
具体操作,请参见连接方式概述。
-
执行如下命令,安装nethogs流量监控工具。
yum install nethogs -y
-
执行如下命令,查看网卡上进程级的流量信息。
nethogs eth1
说明
nethogs默认的监控间隔是1秒,您可以通过-d参数来设定监控间隔。例如执行如下
nethogs eth1 -d 5
命令,设定监控间隔为5秒。系统显示类似如下。
-
若确定进程是恶意程序,可以通过执行如下命令,终止进程。
kill -TERM [$Port1]
说明
如果是Web服务程序,您可以使用iftop等工具来查询具体IP来源,然后分析Web访问日志是否为正常流量。日志分析可以使用logwatch或awstats等工具进行。
显示结果说明
在nethogs监控界面,按s可以按照Sent列进行排序,按r可以按照Received列进行排序,按m可以切换不同的统计单位显示,例如kb/s、kb、b、mb。监控界面信息说明如下所示。
-
PID列表示相应流量关联程序的进程号。
-
USER列表示相应进程的所属用户。
-
PROGRAM列表示程序的具体执行路径。
-
DEV列当前监控的网络接口名称。
-
Sent列表示相应进程已经发送的数据流量。
-
Received列表示程序已经接收的数据流量。