Linux系统命令—cpu、内存、磁盘I\O、网络性能监控

  • Post author:
  • Post category:linux





前言

计算机系统可分为cpu、内存、外存(磁盘等)、外设(网卡等)四大部分,本文主要对这四大块的性能监控的linux命令做了简要小结。




1.Linux基础命令



1.1 检索命令:grep,find

grep —> 搜索关键词

find —> 查找文件


grep main ./test.c -C 3 -n -i


-C 3:打印前后三行

-n:显示行号

-i:忽略关键词的大小写


grep main test/ -r


-r:递归查找


grep main test.c -v


-v, –invert-match 反向查找,选中不匹配的行


grep retu* *.c


支持模糊查找


find . -name test.c



find . -iname test.c


-iname:忽略大小写


find /mnt -type d



find /mnt -type f


按文件类型查找


find /etc -maxdepth 1 -name passwd


mindepth/maxdepth:最小/最大查找层数


find /mnt -size 20K

查找大小在20K左右的文件


find /mnt -size +20K



find /mnt -size -20K


find /mnt -cmin 10

查找在10分钟左右修改的文件


find /mnt -cmin +10



find /mnt -cmin -10



find /mnt -ctime 10

10天左右


find /mnt -ctime +10



find /mnt -ctime +10



1.2 提取信息命令:sed,awk,head和tail,wc

head和tail:

在这里插入图片描述


wc test.c

显示test.c文件的行数、单词数、字节数

sed —> 针对行的批量操作


sed -n '5 p' sed1.cpp

显示1.cpp的第5行


sed -n '2,5 p' sed1.cpp

显示第2~第5行


sed -n '1~2 p' sed1.cpp

显示打印奇数行


sed -n '2~2 p' sed1.cpp

只显示偶数行


sed -n '/void/,+3 p' sed1.cpp

显示void的开头的行,和后三行


'sed -n '/main/,/return/ p' sed1.cpp

显示main开头的行,return结束的行,和之间的数据


sed '2,5 d' sed2.cpp

delete时去掉-n参数


sed -i '2,5 d' sed2.cpp

-i 使用此参数后,所有改动将在原文件上执行


sed -n '2,5 w output.txt' sed2.cpp


sed 's/int/double/g' sed3.cpp


显示 sed3.cpp的所有int替换成double后的内容

s:substitute 替换模式

g:globle


sed -i 's/int/double/g' sed3.cpp


sed3.cpp原文件,所有int替换成double

awk —> 针对列的批量操作


echo i love u | awk '{print $3 $2 $1}'

默认

空格

为分隔符

结果:ulovei


echo 192.168.0.1 | awk -F "." '{print $2}'

修改分隔符为

.


结果:168


cat score.txt


结果:

tom 60 60 60

kitty 90 95 87

jack 72 84 99


awk '{if $2>=90 print $0}' score.txt

第0列就是第1行

结果:

kitty 90 95 87


awk '{if $2>=90 print $1,"优秀";else print $1,"良好"}' score.txt


结果:

tom 良好

kitty 优秀

jack 良好

在这里插入图片描述


netstat -ant |



awk ' \



BEGIN{print "State","Count"} \



/tcp/ \



{ rt[$6]++ } \



END{ for(i in rt){print i,rt[i]} } '


结果:

在这里插入图片描述



1.3 查看文件大小:ls,du


du和ls查看文件大小的区别:



ls

显示的文件大小是

实际的文件大小

;显示的目录大小则表示该目录符所占的大小,并不表示该目录下所有文件的大小。


du

显示的文件和目录的大小是

占用磁盘空间的大小


ls -lhtR


-h:human

t:按最新修改的时间排序,新修改的在前面显示

-R:递归显示


du -a



du -s

显示当前所在目录的大小


du -lh --max-depth=1

最大深度到当前1级子目录



1.4 查看硬盘情况、挂载点:fdisk,df ,lsblk


fdisk -l

查看硬盘分区情况


lsblk

查看所有的块设备


df -h


结果:

在这里插入图片描述

虚拟硬盘的地址为/dev/sda1,虚拟硬盘挂载在文件系统的根目录下,也就是整个根目录的数据都存储在这个虚拟硬盘上。

linux文件系统可理解为目录拓展,每个目录下文件存放的磁盘可以不同,设备挂载到文件系统的某个目录下。


举例说明


假如你插入了一个 CD-ROM.你里面有个文件/file/hahaha.txt,

设备地址为/dev/cdrom




所有设备在linux下都是文件形式存在的


,所以设备会在/dev文件下面),这时候如果你想访问里面的数据,你需要

建立一个文件来映射该设备

,假设你建立了一个/media/cdrom的文件夹,执行下面的命令

mount /dev/cdrom /media/cdrom

就可以通过/media/cdrom/file/hahaha.txt访问到CD-ROM里面的数据了。如果使用完毕,你也可以使用

umount /media/cdrom

将设备卸载。



1.5 查看内存情况:free,查看交换分区:swapon


free -h


Cache和Buffer的区别:

请点这里


swapon -s


查看交互分区的使用情况



1.6 日志监控工具:tail,multitail


tail -f name.log


f:follow



1.7 格式转换:dos2unix和unix2dos


dos2unix test.txt



unix2dos test.txt


find . -type f -exec dos2unix {} \;


找到当前目录下的所有普通文件,dos格式->unix格式



1.8 用户资源:ulimit

Linux系统对每个登录的用户都限制其

最大进程数和打开的最大文件句柄数

。为了提高性能,可以根据硬件资源的具体情况设置各个用户的最大进程数和打开的最大文件句柄数。


ulimit -a


ulimit -u 1024


设置用户的最大进程数


ulimit -n 65530


设置用户可以打开的最大文件句柄数



1.9 显示打开文件:lsof

在Unix中一切(

包括网络套接口

)都是文件


lsof -p 12

看进程号为12的进程打开了哪些文件


lsof -c abc

显示abc进程现在打开的文件


lsof log/default.log

显示打开文件default.log的进程



1.10 远程拷贝:scp

secure copy的缩写,scp是linux系统下

基于ssh

登陆进行安全的远程文件拷贝命令。


scp liaoqingfu@122.152.222.180:/home/liaoqingfu/test.txt

下载122.152.222.180的文件


scp mi9.aac liaoqingfu@122.152.222.180:/home/liaoqingfu/

上传文件到122.152.222.180


scp -r liaoqingfu@122.152.222.180:/home/liaoqingfu/test

下载test整个目录到本地


scp -r test liaoqingfu@122.152.222.180:/home/liaoqingfu/

上传本地test整个目录到122.152.222.180



1.11 其它:ps


ps -ef



ps -aux



pstree




2.cpu、内存、文件I/O性能监控



2.1 一套组合拳:uptime,mpstat,pidstat,vmstat,iostat


uptime


查看平均负载的变化情况


mpstat -P ALL 5 2


查看总的cpu和各个cpu使用率的变化情况


pidstat -urdwt 5 3


查看进程的state

u:cpu的使用率

r:内存的占用情况

d:磁盘I/O统计数据

w:上下文切换

-t:thread,输出线程的指标

-p 进程号:查看某个进程的state


vmstat 5 2


主要查的看参数

r(Running or Runnable):就绪队列,也就是正在运行和等待 CPU 的进程数。

b(Blocked):则是处于不可中断睡眠状态的进程数。

cs:参数表示线程环境的切换次数,此数据太大时表明线程的同步机制有问题。


iostat 2 3


磁盘的统计数据,如虚拟硬盘的I/O状态



2.2 压测模拟:stress,sysbench

进行压测模拟,然后用2.1中的一套组合拳,监控cpu、内存、磁盘I/O的变化情况。

场景一:CPU 密集型进程


stress --cpu 1 --timeout 600


场景二:I/O 密集型进程


stress -i 1 --timeout 600


场景三:大量进程的场景


stress -c 8 --timeout 600


场景四:大量线程的场景


sysbench --num-threads=10 --max-time=300 --max-requests=10000000 --test=threads run



2.3 一些综合性的工具:top(htop,atop),glances,nmon




3.网络I/O性能监控



3.1 常用命令:ping ifconfig,网卡情况:ethtool


ifconfig

来查看网络的配置


ethtool eth1

查看网卡配置


ethtool -i eth0

查看网卡驱动


ethtool -S eth0

查看网卡的一些工作统计信息

通常使用 ping ,来测试远程主机的连通性和延时


ping -c 3 baidu.com


-c 次数:ping指定次数


ping -s 524 182.168.0.116


-s:可以制定数据包的大小,范围:1Byte-65507Byte。默认ping命令的数据包大小是64Bytes


ping -t 255 www.baidu.com


-t:time to live,通过TTL设定值我们可以找到某主机到某主机的最小跳跃次数,即路由转发次数。



3.2 抓包:tcpdump,网络连通性,路由路径:mtr,traceroute


traceroute www.baidu.com


路由路径,延时


mtr www.baidu.com


路由路径,延时,丢包率


tcpdump

抓取各种报文


tcpdump -D

显示网卡设备


tcpdump -i eth0

抓取eth0的报文


tcpdump -i lo

抓取回环报文


tcpdump -i eth0 -c 2

抓取2条报文后退出


tcpdump -i eth0 -c 10 host www.0voice.com and port 80



tcpdump -i eth0 'dst 192.168.1.102 and tcp and (port 21 or 20)


显示去往192.168.1.102的所有会话信息


输出时间格式


-t 不显示时间戳

-tt 自1970年1月1日0点至今的秒数

-ttt 显示邻近两行报文间经过的秒数

-tttt 带日期的完整时间

-ttttt 自第一个抓取的报文起经历的秒数


sudo tcpdump -c 5 -t



sudo tcpdump -c 5 -tt



sudo tcpdump -c 5 -ttt



sudo tcpdump -c 5 -tttt



sudo tcpdump -c 5 -ttttt


文件操作



tcpdump -c 2 -w a

保存2个包到a文件


tcpdump -r a

读取a文件并显示


tcpdump -G 3 -w def%M-%s


-G:指定每个N秒就重新输出至新文件

%M:十时制表示的分钟数

%S:十进制的秒数


分析信息详情


-e 显示数据链路层头部,如08:00:27:ac:3b:da

-q 不显示传输层信息,如seq、ack等

-v 显示网络层头部更多的信息,如TTL、id等

-n 显示IP地址、数字端口代替hostname等

-A 以ASCII方式显示报文内容,适用HTTP分析

-x 以16进制方式显示报文内容,不显示数据链路层

-xx 以16进制方式显示报文内容,显示数据链路层

-X 同时以16进制及ASCII方式显示报文内容,不显示数据链路层

-XX 同时以16进制及ASCII方式显示报文内容,显示数据链路层


sudo tcpdump -r a -e



sudo tcpdump -r a -q



sudo tcpdump -r a -v



sudo tcpdump -r a -n



sudo tcpdump -r a -A



sudo tcpdump -r a -x



sudo tcpdump -r a -xx



sudo tcpdump -r a -X



sudo tcpdump -r a -XX



3.3 显示网络连接,端口信息,state等:netstat,ss


netstat/ss -ltnpo


-a, –all, –listening display all sockets (default: connected)

-l:listen

-t:表示只显示 TCP 套接字

n:表示显示数字地址和端口(而不是名字)

p:process

o:timers

使用 netstat 或 ss 查看协议栈的信息


netstat -s


在这里插入图片描述


ss -s


在这里插入图片描述

这些协议栈的统计信息都很直观。ss 只显示已经连接、关闭、孤儿套接字等简要统计,而 netstat 则提供的是更详细的网络协议栈信息。比如,上面 netstat 的输出示例,就展示了 TCP 协议的主动连接、被

动连接、失败重试、发送和接收的分段数量等各种信息。



3.4 查看某一主机开放的端口:nmap

扫描某一主机打开的端口及端口提供的服务信息,但实际能否进行连通还要看防火墙的设置。


nmap localhost

查看主机当前开放的端口


nmap -p 1024-65535 localhost

-p:port ranges,查看主机端口(1024-65535)中开放的端口


nmap -PS 192.168.56.101

探测目标主机开放的端口


nmap -O 192.168.56.101

探测目标主机开放的端口



3.5 验证服务器端口是否开放:nc


nc -luv 9999

开启一个本地9999的UDP协议端口

-l:用于指定nc将处于侦听模式

-u:指定nc使用UDP协议,默认为TCP

-v:输出交互或出错信息,新手调试时尤为有用

在不熟悉公司的防火墙设置时,也可以通过监听端口来确定指定的端口是否被封

1.A机器操作如下:


nc -l 9999 > /dev/null


2.B机器开启数据传输


nc 129.204.197.215 9999 </dev/zero


3.A机器进行网络监控


sar -n DEV 5 3



3.6 吞吐量,网络使用率:sar


sar -n DEV 5 3


rxpck/s和txpck/s:分别是接收和发送的 PPS,单位为包 / 秒。

rxkB/s和txkB/s:分别是接收和发送的

吞吐量

,单位是 KB/ 秒。

rxcmp/s和txcmp/s:分别是接收和发送的压缩数据包数,单位是包 / 秒。

%ifutil:是网络接口的使用率,

吞吐量(rxkB/s+txkB/s)/Bandwidth



3.7 其他:nslookup,telnet和ssh


nslookup www.baidu.com


检测网络中DNS服务器能否正确解析域名的工具命令

在这里插入图片描述

从输出中可以看到,www.baidu.com域名被正确解析到IP地址108.101.19.12/108.101.49.11。


使用方式:telnet IP PORT


telnet是TCP/IP协议族的一员,是网络远程登录服务的标准协议,帮助用户在本地计算机上连接远程主机。

和ssh 的区别

端口区别:telnet是23 ssh是22

本质:telnet是明码传输,ssh是加密传输




总结

本文是对linux命令的系统性小结,有些命令没有做过多介绍,命令的实际情况以实操中为准。



版权声明:本文为qq_38649266原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。