一、sar
- sar是一个多功能的监控工具,使用简单,不需要管理员权限,可以输出每秒的网卡存取速度,适合线上排查问题时使用
- 比如说云服务器会对服务器做限速,有时候传输文件会发现速率提不上去却找不到原因,可以通过这个命令查看发现原来是云服务器限速的原因
- 命令格式:
sar [ -A ] [ -B ] [ -b ] [ -C ] [ -D ] [ -d ] [ -F [ MOUNT ] ]
[ -H ] [ -h ] [ -p ] [ -q ] [ -r [ ALL ] ] [ -S ] [ -t ]
[ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ] [ --human ]
[ --sadc ] [ -I { int_list | SUM | ALL } ] [ -P { cpu_list | ALL } ]
[ -m { keyword [,...] | ALL } ] [ -n { keyword [,...] | ALL} ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -f [ filename ] | -o [ filename ] | -[0-9]+ ]
[ -i interval ] [ -s [ hh:mm[:ss] ] ] [ -e [ hh:mm[:ss] ] ] [interval [ count ] ]
- 相关选项:
- A:所有报告的总和。
- u:CPU利用率。
- v:进程、I节点、文件和锁表状态。
- d:硬盘的使用报告。
- r:没有使用的内存页面和硬盘快。
- g:串口I/O的情况。
- b:缓冲区的使用情况。
- a:文件的读写情况。
- c:系统的调用情况。
- R:进程的活动情况。
- y:终端设备的活动情况。
- w:系统的交换活动。
演示案例
- 从输出中可以看到网卡的读写速度和流量,在应急过程中可以用来判断服务器是否上量
sar -n DEV 1 1
二、iptraf
- iptraf是一个基于ncurses开发的IP局域网监控工具,它可以实时地监视网卡流量,可以生成各种网络统计数据,包括TCP信息、UDP统计、ICMP和OSPF信息、以太网负载信息、节点统计、IP校验和错误和其它一些信息
- 安装如下:
# centos
yum ‐y install ncurses
yum ‐y install iptraf
# ubuntu
sudo apt‐get install iptraf
- 命令格式:
iptraf { [ -f ] [ -q ] [ -u ] [ { -i iface | -g | -d iface | -s iface |
-z iface | -l iface } [ -t timeout ] [ -B [ -L logfile ] ] ] | [ -h ] }
- 相关选项:
- -i iface:网络接口:立即在指定网络接口上开启IP流量监视,iface为all指监视所有的网络接口,iface指相应的interface
- -g:立即开始生成网络接口的概要状态信息
- -d iface:网络接口:在指定网络接口上立即开始监视明细的网络流量信息,iface指相应的interface
- -s iface:网络接口:在指定网络接口上立即开始监视TCP和UDP网络流量信息,iface指相应的interface
- -z iface:网络接口:在指定网络接口上显示包计数,iface指相应的interface
- -l iface:网络接口:在指定网络接口上立即开始监视局域网工作站信息,iface指相应的interface
- -t timeout:时间:指定iptraf指令监视的时间,timeout指监视时间的minute数
- -B:将标注输出重新定向到“/dev/null”,关闭标注输入,将程序作为后台进程运行
- -L logfile:指定一个文件用于记录所有命令行的log,默认文件是地址:/var/log/iptraf
- -I interval:指定记录log的时间间隔(单位是minute),不包括IP traffic monitor
- -u:允许使用不支持的接口作为以太网设备
- -f:清空所有计数器
- -h:显示帮助信息
- 在进入主界面之前可以选择不同的选项,在不同的选项下可以查看不同维度的网络信息
三、lsof
- lsof是系统管理/安全的尤伯工具。将这个工具称之为lsof真实名副其实,因为它是指“列出打开文件(lists openfiles)”。而有一点要切记,在Unix中一切(包括网络套接口)都是文件
- 命令格式:
lsof [ -?abChKlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ]
[ +|-D D ] [ +|-e s ] [ +|-E ] [ +|-f [cfgGn] ] [ -F [f] ]
[ -g [s] ] [ -i [i] ] [ -k k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ]
[ -o [o] ] [ -p s ] [ +|-r [t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ]
[ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
- 相关选项:
- 默认 : 没有选项,lsof列出活跃进程的所有打开文件
- 组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数
- -a : 结果进行“与”运算(而不是“或”)。多项数据需要【同时成立】才显示出结果时使用
- -l : 在输出显示用户ID而不是用户名
- -h : 获得帮助
- -t : 仅获取进程ID
- -U : 获取UNIX套接口地址
- -u:后面接用户名,列出该使用者相关所使用的文件
- +d:后面接目录,即找出某个目录下面已经被使用的文件
- -F : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)
- 其他演示案例参阅:https://blog.csdn.net/qq_41453285/article/details/88409849
演示案例
- 显示端口被某个程序占用(以80为例)
sudo lsof -i:80
- 查看进程打开了哪些文件(以PID为12的进程为例)
sudo lsof -p 12
- 显示xxx进程现在打开的文件(以ssh进程为例)
sudo lsof -c ssh
- 显示打开xxx文件的进程(以/usr/sbin/sshd为例,见上图)
sudo lsof /usr/sbin/sshd
四、netstat
- 功能:
- 这个命令经常被用在网络监控方面
- 显示的信息会被分为两个部分:一部分是网络相关的部分,一部分是与socket进程相关的部分(非网络)
- 命令格式:
netstat [address_family_options] [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w] [--l2cap|-2] [--rfcomm|-f] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--verbose|-v] [--continuous|-c] [--wide|-W]
netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--interfaces|-i} [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--program|-p] [--numeric|-n] [--numeric-hosts] [--numeric-ports]
[--numeric-users] [--continuous|-c]
netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w]
netstat {--version|-V}
netstat {--help|-h}
address_family_options:
[-4|--inet] [-6|--inet6] [--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp,bluetooth, ... } ] [--unix|-x] [--inet|--ip|--tcpip]
[--ax25] [--x25] [--rose] [--ash] [--bluetooth] [--ipx] [--netrom] [--ddp|--appletalk] [--econet|--ec]
- 相关选项:
- -a:将目前系统上所有连接、监听、socket信息都列出来
- -t:列出tcp网络封包的信息
- -u:列出udp网络封包的信息
- -n:不以进程的服务名称,以端口号来显示
- -l:列出目前正在网络监听的服务
- -p: 列出该网络服务的进程PID
- 提示:
- 你的主机上面到底开了多少个网络服务,与你的网络服务类型无关,而与产生你这个服务的相应的程序有关,程序也是一个进程。例如,你的Linux提供www服务,那么在你的主机上一定要有一个程序来提供这个www服务才行。所以你想要关闭一个网络服务,就关闭该程序所触发的那个进程就行了
演示案例
- 显示网络相关的信息与进程信息
- Active Internet connections (w/o servers)下面的是与网络连接有关的信息
Proto 网络的封包协议,主要为TCP和UDP Recv-Q 非由用户进程连接到此socket的复制的总Bytes数 Send-Q 非由远程主机传送过来的acknowledged总Bytes数 Local Address 本地端的IP:port
如果IP为*:代表使用为0的IP地址(通配地址INADDR_ANY,in6addr_any)
如果port为*:代表为0号端口号(系统自动分配端口)
Foreign Address 远程主机的IP:port State 连接状态,主要有:建立(ESTABLISED)、监听(LISTEN)
- Active UNIX domain sockets (w/o servers)下面是不同的进程的信息(Linux可以接收到不同进程发过来的信息,这就是Linux上面的socket文件,sokcet文件可以沟通两个进程之间的信息,因此进程可以获取对方传过来的数据),上表中socket文件的输出字段如下
Proto 一般就是unix RefCnt 连接到此socket的进程数量 Flags 连接的标识 Type socket存取的类型。主要有确定连接的STREAM与不需要确定的DGRAM两种 State 若为CONNECTED则表示多个进程之间已经建立连接 I-Node Path 连接到此socket的相关进程的路径,或是相关数据的输出路径
第二张图中:那些/tmp/.xx下面的数据,就是X Windows图形界面的相关进程,而PATH指向的就是这些进程要交换数据的socket文件
演示案例
- 列出系统上已在监听的网络连接以及PID
- 除了可以列出监听网络的界面和状态之外,最后一栏还列出了此网络服务进程的PID和进程的名称
- 我们想把上面的那个0 0.0.0.0:59577网络服务关闭的话,可以使用下面的方法(不过这是个非正规的方法,正规的方法查看后面文章的介绍)
kill -9 944 killall -9 dhclient
演示案例
- 显示路由表