Linux下监控进程的网络以及目标主机建立连接的网络流量&非交互使用iotop

1、nethogs工具

while true;
do	
	echo "-----------------------------------------------------------------------" >> /tmp/net_process.log
	date >> /tmp/net_process.log
	nethogs  -t -d 3 -c 5 &>> /tmp/net_process.log
	sleep 10
done

简单讲述一下此命令的使用帮助:

-t 表示非交互显示,这里主要是为了写入本地的文本文件
-d 3表示每隔3s刷新一次
-c 5表示打印5次,为什么要打印5次呢?因为前面几次的流量都不准,所以基本是第3-5次流量是比较准确的。所有的监控工具基本都有这个毛病

可以把上面脚本做个守护进程运行,效果如下所示:

Refreshing:
wget/13089/0	140.115	9734.96
sshd: root@pts/1/11359/0	1.03906	0.234375
/usr/bin/node_exporter/904/0	0	0
/usr/local/cloudmonitor/bin/argusagent/970/0	0	0
/usr/local/aegis/aegis_client/aegis_10_97/AliYunDun/25138/0	0	0

可以看到wget命令的流量很大,主要是看最后一段是9734.96数字,单位是Kb/s(不是带宽),说明目前是9M的速度在下载东西
注意:主要是看最后一列

2、iftop命令

iftop也是一个交互的,但是事实上我们不直接交互使用,还是要写入文本文件,脚本如下所示:

while true;
do
        echo "-------------------------------------------------------" >> /tmp/network.log
        date >> /tmp/network.log
	iftop -i eth0 -N -P -t -L 5 -s 3 -u bytes &>> /tmp/network.log
	sleep 10
done

主要是说一下-s 3,测试了一下如果是1或者2的话结果不是很准确,这里使用3比较好,-u bytes是为了用速率的单位显示,因为默认是带宽,个人不是很习惯这种显示方式,毕竟还要除以8才行
其他命令就不再解释了,直接使用就行,打印的内容如下所示:

其中=>表示本地上传到远端主机,而<=表示从远端主机下载的流量。

3、iotop命令使用

while true;do	
	echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> /tmp/iotop.log
	iotop -bot -n 5 -d 2  &>> /tmp/iotop.log
	echo -e "\n\n" >> /tmp/iotop.log
	sleep 10
done

这里的参数-o表示只打印正在进行io的进程

补充:找到io比较大的进程后,拿到其pid号,然后使用lsof -p xxx可以看到此进程打开的文件,并依次排查究竟是写入了什么文件导致了IO比较大。
事实上lsof查看到的文件也是从/proc/xxx/fd目录下的软链接文件拿到的数据,不妨直接执行ls -l /proc/xxx/fd也可以看到这个进程打开的文件都有哪些

posted @ 2021-08-16 21:05  峰哥ge  阅读(311)  评论(0编辑  收藏  举报