网络排错常用命令

ping

基本用法
  1. ping [选项] [主机]
  2. #参数
  3. -d 使用SocketSO_DEBUG功能。
  4. -f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。
  5. -n 只输出数值。
  6. -q 不显示任何传送封包的信息,只显示最后的结果。
  7. -r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
  8. -R 记录路由过程。
  9. -v 详细显示指令的执行过程。
  10. <p>-c 数目:在发送指定数目的包后停止。
  11. -i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
  12. -I 网络界面:使用指定的网络界面送出数据包。
  13. -l 前置载入:设置在送出要求信息之前,先行发出的数据包。
  14. -p 范本样式:设置填满数据包的范本样式。
  15. -s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
  16. -t 存活数值:设置存活数值TTL的大小。

常用示例
  1. #指定源地址 win 使用-l -n
  2. ping -a 192.168.0.1 8.8.8.8
  3. #指定数据包大小及数量
  4. ping -s 1500 -c 100 8.8.8.8
  5. #禁止分片
  6. ping -s 1472 -f 8.8.8.8
  7. #快速查找MAC及ARP
  8. arp -a
  9. display mac-address |include MAC
  10. display arp |include MAC/IP

telnet

基本用法
#telnet 192.168.1.1 80
#选项
-8:允许使用8位字符资料,包括输入与输出; 
-a:尝试自动登入远端系统;
-b<主机别名>:使用别名指定远端主机名称; 
-c:不读取用户专属目录里的.telnetrc文件;
-d:启动排错模式; 
-e<脱离字符>:设置脱离字符; 
-E:滤除脱离字符; 
-f:此参数的效果和指定"-F"参数相同; 
-F:使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机; 
-k<域名>:使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名; 
-K:不自动登入远端主机; 
-l<用户名称>:指定要登入远端主机的用户名称; 
-L:允许输出8位字符资料; 
-n<记录文件>:指定文件记录相关信息; 
-r:使用类似rlogin指令的用户界面; 
-S<服务类型>:设置telnet连线所需的ip TOS信息; 
-x:假设主机有支持数据加密的功能,就使用它; 
-X<认证形态>:关闭指定的认证形态。

nmap

扫描主机端口
nmap IP/Hostname
#nmap 172.168.1.*
#nmap 172.168.2.1 172.168.2.2
#nmap 172.168.2.1,2
#nmap 172.168.1-2
#nmap -iL hostlist.txt

查看主机TCP端口
nmap -p 80 172.168.1.1

查看主机防火墙
nmap -sA 172.168.1.1

nc

检测端口联通性
#检测TCP端口
nc -vz -w2 192.168.1.1 22
#检测UDP端口
nc -uz -w2 192.168.1.1 53

参数说明
-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。

traceroute

查看路由
traceroute IP/hostname
#配合ip138排错
#默认向每个网关发送三个包,所以默认每一跳后面有三个时间,默认是-q3

命令选项
-d:使用Socket层级的排错功能; 
-f<存活数值>:设置第一个检测数据包的存活数值TTL的大小; 
-F:设置勿离断位; 
-g<网关>:设置来源路由网关,最多可设置8个; 
-i<网络界面>:使用指定的网络界面送出数据包; 
-I:使用ICMP回应取代UDP资料信息; 
-m<存活数值>:设置检测数据包的最大存活数值TTL的大小; 
-n:直接使用IP地址而非主机名称; 
-p<通信端口>:设置UDP传输协议的通信端口; 
-r:忽略普通的Routing Table,直接将数据包送到远端主机上。 
-s<来源地址>:设置本地主机送出数据包的IP地址; 
-t<服务类型>:设置检测数据包的TOS数值; 
-v:详细显示指令的执行过程; 
-w<超时秒数>:设置等待远端主机回报的时间; 
-x:开启或关闭数据包的正确性检验。 参数

mtr

基本用法
#mtr -c 400 -i 0.1  -n -r 8.8.8.8
#mtr IP/hostname
#选项
mtr -h  #提供帮助命令
mtr -v  #显示mtr的版本信息
mtr -r  #已报告模式显示
mtr -s  #用来指定ping数据包的大小
mtr --no-dns  #不对IP地址做域名解析
mtr -a  #来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
mtr -i  #使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -4  #IPv4
mtr -6  #IPv6

命令输出说明
Host Loss Snt Last Avg Best Wrst StDev
172.17.0.1 0.0% 608 0.7 0.6 0.6 3.8 0.2
地址 丢包率 每秒发送数据包量 最近的ping值 平均ping 最好ping 最差ping

标准偏差

命令安装
#mac os install
sudo chown -R $(whoami):admin /usr/local
brew install mtr
brew link mtr

抓包排错

tcpdump

参考:

Ex1: 抓取指定主机
tcpdump -i eth1 host 192.168.1.1
#抓取所有经过eth1,目的或源地址为192.168.1.1的数据
tcpdump -i eth1 src host 192.168.1.1
#指定源地址
tcpdump -i eth1 dst host 192.168.1.1
#指定目的地址

Ex2: 抓取指定端口
tcpdump -i eth1 port 25
#抓取所有经过eth1,目的或源端口是25的网络数据
tcpdump -i eth1 src port 25
#指定源端口
tcpdump -i eth1 dst port 25
#指定目的端口

Ex3: 网络过滤
tcpdump -i eth1 net 192.168
tcpdump -i eth1 src net 192.168
tcpdump -i eth1 dst net 192.168

Ex4: 协议过滤
tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp

Ex5: 多条件过滤
tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数据
tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据
tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
#---表达式---
#非 : ! or "not" (去掉双引号)  
#且 : && or "and"  
#或 : || or "or"

常用示例
#抓100个(-c)完整的(-s 0)数据包,不显示时间戳(-t)
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port 22 and src net 192.168.1.0/24 -w ./save.cap
#
#抓取指定网卡所有数据包并保存
tcpdump -i eth0 -w  save.cap
#抓取指定网卡从baidu发送来的所有数据
tcpdump -i eth0 src host baidu.com
#抓取指定网卡发送到baidu.com的所有数据
tcpdump -i eth0 dst host baidu.com
#抓取指定主机(即源或目标都匹配,可以是域名也可以是IP,还可以抓取两个地址之间的通信)
tcpdump host baidu.com 
tcpdump host 114.114.114.114
tcpdump host host1 and host2
tcpdump host 114.114.114.114 and 8.8.8.8
tcpdump host 114.114.114.114 and \(8.8.8.8 or 8.8.4.4)
#抓取除google.com之外baidu相关的所有数据包
tcpdump ip host baidu.com and not google.com
#
#抓取主机baidu.com从TCP22端口接收或发送的数据包
tcpdump tcp port 22 and host baidu.com
tcpdump udp port 53 and host 114.114.114.114
#
#抓取TCP会话中的的开始和结束数据包, 并且数据包的源或目的不是本地网络上的主机
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
#抓取所有源或目的端口是80,网络层协议为IPv4,并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的数据包
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
#抓取长度超过576字节, 并且网关地址是baidu.com的IP数据包
tcpdump 'gateway baidu.com and ip[2:2] > 576'
#抓取所有IP层广播或多播的数据包, 但不是物理以太网层的广播或多播数据报
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
#抓取除'echo request'或者'echo reply'类型以外的ICMP数据包
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
#
#抓取HTTP包(0x4745为"GET"前两个字母"GE",0x4854为"HTTP"前两个字母"HT")
tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

wireshark

Ex1: 分析ssh登陆
#先使用Filter过滤ssh协议–>然后定位有问题的ssh连接–>然后使用frame过滤出有问题的行
frame.number>34&&frame.number<56
#检索出34到56行

系统及进程排错

ps

常用选项
ps aux
ps -ef
ps -lA
ps -axjf

选项手册
  -a  显示所有终端机下执行的进程,除了阶段作业领导者之外。
   a  显示现行终端机下的所有进程,包括其他用户的进程。
  -A  显示所有进程。
  -c  显示CLS和PRI栏位。
   c  列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
  -C<指令名称>  指定执行指令的名称,并列出该指令的进程的状况。
  -d  显示所有进程,但不包括阶段作业领导者的进程。
  -e  此参数的效果和指定"A"参数相同。
   e  列出进程时,显示每个进程所使用的环境变量。
  -f  显示UID,PPIP,C与STIME栏位。
   f  用ASCII字符显示树状结构,表达进程间的相互关系。
  -g<群组名称>  此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的名称来指定。
   g  显示现行终端机下的所有进程,包括群组领导者的进程。
  -G<群组识别码>  列出属于该群组的进程的状况,也可使用群组名称来指定。
   h  不显示标题列。
  -H  显示树状结构,表示进程间的相互关系。
  -j或j  采用工作控制的格式显示进程状况。
  -l或l  采用详细的格式来显示进程状况。
   L  列出栏位的相关信息。
  -m或m  显示所有的执行绪。
   n  以数字来表示USER和WCHAN栏位。
  -N  显示所有的进程,除了执行ps指令终端机下的进程之外。
  -p<进程识别码>  指定进程识别码,并列出该进程的状况。
   p<进程识别码>  此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。
   r  只列出现行终端机正在执行中的进程。
  -s<阶段作业>  指定阶段作业的进程识别码,并列出隶属该阶段作业的进程的状况。
   s  采用进程信号的格式显示进程状况。
   S  列出进程时,包括已中断的子进程资料。
  -t<终端机编号>  指定终端机编号,并列出属于该终端机的进程的状况。
   t<终端机编号>  此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。
  -T  显示现行终端机下的所有进程。
  -u<用户识别码>  此参数的效果和指定"-U"参数相同。
   u  以用户为主的格式来显示进程状况。
  -U<用户识别码>  列出属于该用户的进程的状况,也可使用用户名称来指定。
   U<用户名称>  列出属于该用户的进程的状况。
   v  采用虚拟内存的格式显示进程状况。
  -V或V  显示版本信息。
  -w或w  采用宽阔的格式来显示进程状况。 
   x  显示所有进程,不以终端机来区分。
   X  采用旧式的Linux i386登陆格式显示进程状况。
   -y 配合参数"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位
  -<进程识别码>  此参数的效果和指定"p"参数相同。
  --cols<每列字符数>  设置每列的最大字符数。
  --columns<每列字符数>  此参数的效果和指定"--cols"参数相同。
  --cumulative  此参数的效果和指定"S"参数相同。
  --deselect  此参数的效果和指定"-N"参数相同。
  --forest  此参数的效果和指定"f"参数相同。
  --headers  重复显示标题列。
  --help  在线帮助。
  --info  显示排错信息。
  --lines<显示列数> 设置显示画面的列数。
  --no-headers  此参数的效果和指定"h"参数相同,只在列表格式方面稍有差异。
  --group<群组名称>  此参数的效果和指定"-G"参数相同。
  --Group<群组识别码>  此参数的效果和指定"-G"参数相同。
  --pid<进程识别码>  此参数的效果和指定"-p"参数相同。
  --rows<显示列数>  此参数的效果和指定"--lines"参数相同。
  --sid<阶段作业>  此参数的效果和指定"-s"参数相同。
  --tty<终端机编号>  此参数的效果和指定"-t"参数相同。
  --user<用户名称>  此参数的效果和指定"-U"参数相同。
  --User<用户识别码>  此参数的效果和指定"-U"参数相同。
  --version  此参数的效果和指定"-V"参数相同。
  --widty<每列字符数>  此参数的效果和指定"-cols"参数相同。

top

输出详解

top_output_ex1.png

12:57:32 up 63 days, 35 min 当前时间12点57分,系统运行了63天35分
3 users 当前登陆用户为3人
load average:0.05,0.01,0.00 三个数值分别为1分钟、5分钟、15分钟系统的负载(即任务队列平均长度)
Tasks:140 total 当前进程总数为140个
1 running,139 sleeping,0 stopped,0 zombie 共有1个运行、139个睡眠、0个停止、0个僵尸进程
Cpu(s): 0.0%us 用户空间占用cpu百分比
Cpu(s): 0.0%sy 内核空间占用cpu百分比
Cpu(s): 0.0%ni 用户进程空间内改变过优先级的进程占用cpu百分比
Cpu(s): 99.8%id 空闲cpu占用百分比
Cpu(s): 0.0%wa IO等待占用CPU的百分比
Cpu(s): 0.0%hi 硬中断(Hardware IRQ)占用CPU的百分比
Cpu(s): 0.0%si 软中断(Software Interrupts)占用CPU的百分比
Cpu(s): 0.0%st
Mem: total 总共的内存大小
Mem: used 使用的内存大小
Mem: free 空闲内存大小
Mem: buffers 缓存的内存大小
Swap: total 总共的交换分区大小
Swap: used 使用的交换分区大小
Swap: free 空闲的交换分区大小
Swap: cached 缓冲的交换分区大小
PID 进程ID
USER 进程所有者
PR 进程优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位Kb。VIRT=SWAP+RES
RES 进程使用的未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR 共享内存大小
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的cpu时间占用比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的cpu时间总计,单位1/100秒
COMMAND 进程名称(命令名)

命令交互(常用)
h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中

strace

常用示例
strace -c -p 2695
#
strace -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489
#-tt 在每行输出的前面,显示毫秒级别的时间
#-T 显示每次系统调用所花费的时间
#-v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
#-f 跟踪目标进程,以及目标进程创建的所有子进程
#-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
#-o 把strace的输出单独写到指定的文件
#-s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
#-p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可
#-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
strace -tt -T -f -e trace=file -o /data/log/strace.log -s 1024 ./nginx
#输出第一列是进程PID,接着是毫秒级别的时间(-tt),最后一行最后一列显示该调用花费的时间(-T)
#指定trace=file,可以看到跟进程有关的文件操作
#指定trace=process,表示只跟踪和进程管理相关的系统调用,比如fork/exec/exit_group
#指定trace=ipc,表示只跟中和京城相关的系统调用,比如shmget等
#指定trace=network,表示和网络通信相关的调用,比如socket/sendto/connect
#指定trace=desc,表示和文件描述符相关,比如write/read/select/epoll等
#指定trace=signal,表示信号发送和处理相关,比如kill/sigaction
#指定trace=all,表示统计所有的系统调用

sar

常用示例
sar -o save.txt
#怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
#怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看
#怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
#示例
sar
sar -u
#12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
#12:10:01 AM     all      4.32      0.00      1.12      0.02      0.81     93.73
#解释(默认sar命令就是-u参数,查看cpu使用率
#%user 用户模式下消耗的CPU时间的比例
#%nice 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例
#%system 系统模式下消耗的CPU时间的比例;
#%iowait CPU等待磁盘I/O导致空闲状态消耗的时间比例。若 %iowait 的值过高,表示硬盘存在I/O瓶颈
#%steal 利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例
#%idle CPU空闲时间比例;若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
sar -q
#12:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
#12:10:01 AM         0       383      0.48      0.35      0.37
#12:20:01 AM         0       383      0.29      0.20      0.26
#解释(查看平均负载)
#runq-sz:运行队列的长度(等待运行的进程数)
#plist-sz:进程列表中进程(processes)和线程(threads)的数量
#ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载
#ldavg-15:过去15分钟的系统平均负载
sar -r
#12:00:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
#12:10:01 AM    339184   7837320     95.85    185956   1653488  14140380    172.94
#12:20:01 AM    345020   7831484     95.78    185976   1657220  14145792    173.01
#解释(查看内存使用状况)
#kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
#kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
#物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比
#kbbuffers和kbcached:这两个值就是free命令中的buffer和cache
#kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
#%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比
sar -W
#12:00:01 AM  pswpin/s pswpout/s
#12:10:01 AM      0.00      0.00
#12:20:01 AM      0.00      0.00
#解释(查看页面交换发生情况)
#pswpin/s:每秒系统换入的交换页面(swap page)数量
#pswpout/s:每秒系统换出的交换页面(swap page)数量
sar -d -p
#03:00:01 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
#03:10:01 PM       sda      9.15    102.04    118.85     24.14      0.01      0.93      0.17      0.15
#03:10:01 PM       sdb     25.09     71.63    696.74     30.62      0.26     10.52      6.81     17.08
#解释(查看设备使用情况),-p参数可以显示磁盘等设备名称
#tcs: 每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的
#rd_sec/s: 每秒读扇区的次数
#wr_sec/s: 每秒写扇区的次数.
#avgrq-sz: 平均每次设备I/O操作的数据大小(扇区).avgqu-sz 的值较低时,设备的利用率较高。
#avgqu-sz: 磁盘请求队列的平均长度.
#await: 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒)
#svctm: 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间
#%util: I/O请求占CPU的百分比,比率越大,说明越饱和.当%util的值接近 100% 时,表示设备带宽已经占满

选项说明
#全选项
-A 汇总所有的报告
-a 报告文件读写使用情况
-B 报告附加的缓存的使用情况
-b 报告缓存的使用情况
-c 报告系统调用的使用情况
-d 报告磁盘的使用情况
-g 报告串口的使用情况
-h 报告关于buffer使用的统计数据
-m 报告IPC消息队列和信号量的使用情况
-n 报告命名cache的使用情况
-p 报告调页活动的使用情况
-q 报告运行队列和交换队列的平均长度
-R 报告进程的活动情况
-r 报告没有使用的内存页面和硬盘块
-u 报告CPU的利用率
-v 报告进程、i节点、文件和锁表状态
-w 报告系统交换活动状况
-y 报告TTY设备活动状况

vmstat

基本使用
vmstat 2 1
#表示每两秒采集一次共采集1次
vmstat 2
#表示每两秒采集一次一直采集

输出说明
输出 说明
r 在运行队列中等待的进程数,这个值超过CPU数目就可认为CPU达到瓶颈
b 在等待IO的进程数,进程阻塞程度
swpd 正在使用的swap大小,超过0就说明物理内存可能不足
free 空闲的物理内存的大小
buff 已使用的buff大小,对块设备的读写进行缓冲
cache 已使用cache的大小,文件系统的cache
si 每秒从交换区写到内存的大小
so 每秒写入交换区的大小
bi 每秒读取的块数
bo 每秒写入的块数
in 每秒CPU的中断次数,包括时钟中断
cs 每秒上下文切换数
us 用户进程执行时间
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁
id 空闲 CPU时间
wa 等待IO时间

iostat

输出说明

Tips:

  • %util如果过高说明产生的I/O请求过多,磁盘负荷比较高
输出 说明
Devices 磁盘名称
rrqm/s 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s 每秒读扇区数。即 delta(rsect)/s
wsec/s 每秒写扇区数。即 delta(wsect)/s
rkB/s 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节
wkB/s 每秒写K字节数。是 wsect/s 的一半
avgrq-sz 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)
await 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的

netstat

常用命令组合
netstat -lntp
#列出在监听状态的TCP连接并不显示别名
netstat -lnup
#列出在监听状态的UDP连接并不显示别名
netstat -r
#显示核心路由信息

常用统计
netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
#查看连接某服务最多的前20个IP地址
netstat -nat |awk '{print $6}'|sort|uniq -c
#查看所有TCP连接处于各个状态的个数

常用选项说明
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

nmon

用途 :以交互方式显示本地系统统计信息并以记录方式记录系统统计信息。

#Install
yum install nmon

交互模式
#直接nmon进入即可,进入后可根据-h帮助信息查看对应的指标
nmon [ -h ]

记录模式
#显示和记录本地系统信息.如果指定 -F、-f、-X、-x 和 -Z 标志中的任何一个,那么 nmon 命令处于记录方式.在记录模式下,此命令会生成nmon文件,可以通过该打开这些文件直接进行查看。在记录期间,nmon 工具会与 shell 断开连接,以确保该命令即使在您注销的情况下仍然继续运行。
nmon [ -f | -F filename | -x | -X | -z ] [ -r < runname > ] [ -t | -T | -Y ] [ -s seconds ] [ -c number ] [ -w number ] [ -l dpl ] [ -d ] [ -g filename ] [ -kdisklist ] [ -C <process1:process2:..:processN > ] [ -G ] [ -K ] [ -o outputpath ] [ -D ] [ -E ] [ -J ] [ -V ] [ -P ] [ -M ] [ -N ] [ -W ] [ -S ] [ -^ ] [ -O ] [ -L ] [ -I percent ] [ -A ] [ -m < dir > ] [ -Z priority ]

进程视图模式

要显示此视图,请按 tv

使用示例
#Ex1:要在两个小时的时间段内在当前目录中生成 nmon 记录,每 30 秒捕获一次数据
nmon -f -s 30 -c 240
#Ex2: 要在 nmon 命令启动后立即显示内存和处理器统计信息
export NMON=mc
#Ex3: 要在 20 秒的时间段内运行 nmon 命令并且屏幕每 10 秒刷新一次
nmon -c 10 -s 2

curl

Tips:

常用示例
#Ex0: 带用户名密码请求
curl -u username:password http://example.com
#Ex1: 指定命令和头信息进行请求
curl -X GET -H "Authorization: Bearer token" -i  "https://your/uri"
#Ex2: 不显示统计信息进行请求(-s选项)
curl -X GET -s -i "http://your/uri"

perf

Tips:

常用示例
yum install perf
perf top -e cycles:k     #显示内核和模块中,消耗最多CPU周期的函数
perf top -e kmem:kmem_cache_alloc     #显示分配高速缓存最多的函数
perf top -G         #得到调用关系图
perf top -e cycles         #指定性能事件
perf top -p 23015,32476         #查看这两个进程的cpu cycles使用情况
perf top -s comm,pid,symbol         #显示调用symbol的进程名和进程号
perf top --comms nginx,top         #仅显示属于指定进程的符号
perf top --symbols kfree         #仅显示指定的符号
perf stat -r 10 ls > /dev/null         #执行10次程序,给出标准偏差与期望的比值
perf stat -v ls > /dev/null         #显示更详细的信息
perf stat -n ls > /dev/null         #只显示任务执行时间,不显示性能计数器
perf stat -e syscalls:sys_enter ls          #ls命令执行了多少次系统调用
perf record -e syscalls:sys_enter ls      #记录执行ls时的系统调用,可以知道哪些 系统调用最频繁
perf record -p `pgrep -d ',' nginx`      #记录nginx进程的性能数据
perf record ls -g    #记录执行ls时的性能数据

选项说明
   annotate        Read perf.data (created by perf record) and display annotated code
   archive         Create archive with object files with build-ids found in perf.data file
   bench           General framework for benchmark suites
   buildid-cache   Manage build-id cache.
   buildid-list    List the buildids in a perf.data file
   c2c             Shared Data C2C/HITM Analyzer.
   config          Get and set variables in a configuration file.
   data            Data file related processing
   diff            Read perf.data files and display the differential profile
   evlist          List the event names in a perf.data file
   ftrace          simple wrapper for kernel's ftrace functionality
   inject          Filter to augment the events stream with additional information
   kallsyms        Searches running kernel for symbols
   kmem            Tool to trace/measure kernel memory properties
   kvm             Tool to trace/measure kvm guest os
   list            List all symbolic event types
   lock            Analyze lock events
   mem             Profile memory accesses
   record          Run a command and record its profile into perf.data
   report          Read perf.data (created by perf record) and display the profile
   sched           Tool to trace/measure scheduler properties (latencies)
   script          Read perf.data (created by perf record) and display trace output
   stat            Run a command and gather performance counter statistics
   test            Runs sanity tests.
   timechart       Tool to visualize total system behavior during a workload
   top             System profiling tool.
   probe           Define new dynamic tracepoints
   trace           strace inspired tool