问题:公司一台服务器本身只有20Mb带宽,当开发部署完程序启动之后一会就飙到60,并且持续居高不下,严重影响服务器使用效率,经过排查发现程序启动以后该进程与一个不明的外网IP进行了大流量的IO,配合云平台云监控公网带宽的走势图证明了进站曲线的走势与系统查看结果相吻合,排查过程如下:

centos 查看443被占用 centos查看进程占用的带宽_服务器

linux查看进程占用带宽和流量使用情况

有三个命令vnstat、iftop、nethogs(推荐iftop+nethogs结合使用)

都需要额外安装软件 使用yum或apt-get

yum -y install vnstat

yum -y install iftop

yum -y install nethogs

命令查看全部网卡实时流量动态:

watch cat /proc/net/dev

#在线使用的网卡一般是流量变化最大的网卡

centos 查看443被占用 centos查看进程占用的带宽_centos 查看443被占用_02

一、vnstat使用,查看接口统计报告

vnstat -i eth0 -l #实时流量情况

#tx是发送(transport),rx是接收(receive)。光纤中是成对出现的,收发是1对。收发必须同时,只收不发,只发不收都是有问题的。

ctrl+c结束后,会显示监控期间的流量统计结果

二、iftop使用,检查带宽使用情况

iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等

命令用法:

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

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

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

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

交互命令:

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

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

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

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

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

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

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

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

centos 查看443被占用 centos查看进程占用的带宽_centos 查看443被占用_03

三、nethogs使用,按进程实时统计网络带宽利用率

命令用法:

1、设置5秒钟刷新一次,通过-d来指定刷新频率:nethogs -d 5

2、监视eth0网络带宽 :nethogs eth0

3、同时监视eth0和eth1接口 : nethogs eth0 eth1

交互命令:

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

m : 修改单位

r : 按流量排序

s : 按发送流量排序

q : 退出命令提示符

centos 查看443被占用 centos查看进程占用的带宽_IP_04

#在PID 那一列,可以使用 lsof -p  pid 查看进程测试。或者用lsof -i :端口号,来查看是哪些进程在占用。如查看80端口  lsof -i :80

总结:先使用iftop找到与该服务器大流量通信的可疑IP,然后再使用nethogs查看具体进程。

解决办法:云平台安全组设置对该可疑IP的进站限制即可。