一 CPU 性能监控工具
1 vmstat ,系统自带
procs 列 :
r 列: 表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU核数,说明CPU不足,需要增加CPU,其中的CPU指的是逻辑CPU
查看CPU总核数 :
b 列表示在等待的资源的进程数目
memory列:
swpd:是内存切换到交换分区的量(单位为k),如果swpd值不为0,或者较大,只要si so 长期为0,不会影响系统性能
free 表示当前空间的物理内存数量(单位为k)
buff 表示buff chache 的内存数量,一般对块设备的读写才要缓冲
cache 表示page cached 的内存数量,一般作为文件系统的cached,频繁访问的文件都会被放入cached中,当物理内存过小或不够使用时,其会释放
swap列:
si : 每秒由交换分区写入内存的大小
so :每秒由内存写入交换分区的大小
如果内存足够使用,则交换分区的写入和写出都为0,只有当这两个值长期大于0,则表示系统内存不够。
IO 列:
BI :表示从块设备读入数据的总量(即读磁盘)(块/s)
BO:表示写入块设置的数据总量(即写磁盘)(块/s)
system 列: 显示采集间隔内发生的中断数
in 列表示在某一时间间隔内观察到每秒设备中断数
cs 列表示每秒产生的上下文切换次数
如果这两个值比较大,表示内核消耗CPU比较厉害
CPU列: 显示了CPU的使用状态
us: 用户进程消耗CPU的时间百分比,如果长期大于50%,则需要优化程序算法
sy: 显示了系统(内核)进程消耗CPU的时间百分比,如果大于80%,则说明可能CPU资源不足
id : 显示了CPU 处于空闲时间的百分比
wa :显示了IO 等待所占用的CPU时间百分比,如果长期高于20%,则有问题
可选参数及扩展:
参数选项 | 解释说明 |
---|---|
-a | 显示活跃和非活跃期内存 |
-f | 显示从系统启动至今的fork 进程数量 |
-m | 显示slab信息 |
-n | 只在开始时显示一次个字段的名称 |
-s | 显示内存相关统计信息及多种系统活动数量(重点) |
-d | 显示磁盘相关统计信息 |
-p | 显示指定磁盘分区统计信息 |
-S | 使用指定单位显示,有k,K,m,M,分别代表1000,1024,1000000,1048576字节,默认单位为k(重点) |
-t | 统计信息带上时间戳 |
范例 1
3 表示3秒间隔
5 表示显示5次
inact 表示非活跃的内存大小
active 表示活跃的内存大小
2 iostat 需要安装
iostat 是I/O statistics(输入/输出)的缩写,其主要功能是对系统磁盘I/O操作进行监视,它的主要是显示磁盘读写操作的统计信息,同时也会给出CPU的使用情况。
语法格式
iostat [选项] [ 时间间隔 [次数]]
参数选项 | 解释说明 |
---|---|
-c | 显示CPU的使用情况 |
-d | 显示磁盘的使用情况 |
-k | 每秒以kB为单位显示数据 |
-m | 每秒以MB 单位显示数据 |
-n | 显示NFS 的使用情况 |
-t | 显示每次统计执行的时间 |
-p device | 指定要统计的磁盘设备名称,默认为所有磁盘 |
-x | 显示扩展统计 |
%user :用户进程消耗CPU时间百分比
%nice:改变优先级的进程占用CPU时间百分比
%system: 系统内核进程消耗的CPU时间百分比
%iowait:IO等待所占中的CPU时间百分比
%steal:虚拟机强制CPU等待时间百分比
%idle: CPU空闲状态的时间百分比
tps:表示该设备每秒传输次数,一次传输的意思是一次I/O请求,多个逻辑请求可能会被合并成一次I/O请求
Blk_read/s:表示每秒读取的数据块数
Blk_wrtn/s:表示每秒写入的数据块数
Blk_read: 表示读取的所有块数
Blk_wrtn: 表示写入的所有块数
rrqm/s:每秒进行merge 的读操作的数目
wrqm/s:每秒进行merge 的写操作数据
r/s : 每秒完成的读I/O 设备次数
w/s:每秒完成的写I/O设备的次数
rKB/s:每秒读入的千字节数
wKB/s: 每秒写入的千字节数
avgrq-sz: 设备平均每次进行I/O操作的数据大小(扇区)
avgqu-sz:平均I/O队列长度
await:设备平均每次I/O操作的等待时间
svctm: 设备平均每次I/O操作的等待时间
%util:每秒中用于I/O操作的百分比
3 uptime 命令
uptime (选项)
-V 显示指令的版本信息
内容说明:
15:07:32 系统的当前时间
up 14min ,表示系统已经运行的时间
1 user 表示用户的链接数,是总链接数
load average 表示系统平均负载,统计最近1,5,15 分钟平均负载
系统的平均负载是指在特定时间内运行队列的平均进程数。
如果每个CPU内核的当前活动进程数不大于3.表示系统性能是良好的,如果大于5,则说明性能严重有问题
sar 收集系统信息
通过sar 命令,可以全面的获取CPU,运行队列,磁盘I/O、分页(交换区)、内存、CPU中断和网络等性能数据
语法格式
sar [选项] [时间间隔 [次数]]
说明:
在sar 命令及后面的选项中,每个元素之间至少要有一个空格
参数说明
参数选项 | 解释说明 |
---|---|
-A | 显示系统所有资源设备的运行情况 |
-u | 显示系统所有CPU在采样时间内的负载状态 |
-P | 显示当前系统中指定CPU的使用情况 |
-d | 显示所有硬盘设备在采样时间内的使用情况 |
-r | 显示在采样时间内系统内存的使用情况 |
-b | 显示在采样时间内缓冲区的使用情况 |
-v | 显示索引节点、文件和其他内核表的状态 |
-n | 显示网络运行状态 |
-q | 显示运行队列的大小,它与系统当前的平均负载相同 |
-R | 显示进程在采样时间内的活动情况 |
-w | 显示系统交换活动在采样时间内的状态 |
安装软件包
查看CPU相关信息:
kbmemfree : 空闲物理内存量
kbmemused: 使用中的物理内存量
%memused: 物理内存的使用率
kbbuffers: 内存中作为缓冲区使用的物理内存容量
kubcached:内核中作为缓存使用的物理内存容量
%xommit:应用程序当前的内存大小占大小的使用百分比
显示缓冲区的使用情况:
tps: 每秒物理设备的I/O传输总量
rtps:每秒从物理设备读入的数据总量
wtps:每秒向物理设备写入的数据总量
bread/s:每秒从物理设备读入的数据量,单位为块/s。
bwrtn/s:每秒向物理设备写入的数据量,单位同上
显示网络的运行状态
IFACE:网络接口
rxpck/s:每秒中接受的数据包
txpck/s:每秒中发送的数据包
rxkB/s: 每秒钟接受的字节数
txkB/s:秒钟发送的字节数
rxcmp/s:每秒中接受的压缩数据包
txcmp/s:秒钟发送的压缩数据包
rxmcst/s:每秒中接受的多播数据包
IFACE:网络接口
rxerr/s: 每秒中接受的坏数据包
txerr/s:每秒钟发生的坏数据包
coll/s:每秒的冲突数
rxdrop/s: 因为缓冲充满,每秒钟丢弃的已经接收的数据包数
txdrop/s:因为缓冲充满。每秒中丢弃已经发送的数据包数
txcarr/s: 发送数据包时,每秒载波错误数
rxfram/s:每秒接受数据包的帧对其错误数
rxfifo/s: 接受的数据包每秒FIFO过速的错误数
txfifo/s: 发送的数据包每秒FIFO过速的错误数。
显示套接字信息
totsck:使用套接字总数量
tcpsck: 使用TCP套接字数量
udpsck:使用UDP套接字数量
rawsck:使用raw 套接字数量
ip-frag:使用IP段数量
tcp-tw:处于TIME_WAIT状态的TCP套接字数量
DEV: 表示磁盘设备名称
tps: 表示该设备每秒的传输次数
rd_sec/s: 表示每秒从设备读取的扇区数
wr_sec/s:表示每秒写入设备的扇区数目
avgrq-sz:设备平均每次I/O操作的数据大小(扇区)
avgqu-sz:平均I/O队列长度
await:设备平均每次I/O操作的等待时间(毫秒)
svctm:设备平均每次I/O操作的服务时间(毫秒)
%util: 每秒用于I/O操作的百分比
二 网络管理命令
1 tcpdump
tcpdump 命令是一个截获网络数据包的包分析工具,tcpdump可以将网络中传送的数据包的[头]完全截获下来分析,它支持针对网络层,协议,主机,端口等的过滤,并支持与、或、非逻辑语句协助过滤有效信息
tcpdump命令工作是要先把网卡的工作模式切换到混杂模式,因为要修改网络接口的工作模式,因此tcpdump命令需要以root的身份运行
tcpdump [选项] [表达式]
参数说明
参数选项 | 解释说明 |
---|---|
-A | 以ASCII 码方式显示每一个数据包,在抓取数据包时,可方面查看数据 |
-c <数据包数目> | 接受指定的数据包数目后退出命令 |
-e | 每行的打印输出中将包含数据包的数据链路层头部信息 |
-i <网络接口> | 指定要监听数据包的网络接口 |
-n | 不进行DNS解析,加快显示速度 |
-nn | 不将协议和端口数字等转换成名字 |
-q | 以快速的方式运行,此选项仅显示数据包的协议概要信息,输出信息较短 |
-s <数据包大小> | 设置数据包抓取长度,如果不设置则默认为68字节,设置为0则自动选择合适的长度来抓取数据包 |
-t | 在每行输出信息中不显示时间戳标记 |
-tt | 显示当前行与前一行的延迟 |
-tttt | 在每行打印的时间戳之前添加日期 |
-v | 显示命令执行的详细信息 |
-vv | 显示比-v 选项更加详细的信息 |
-vvvv | 显示更加相信的输出 |
实例 :
-i 指定监听的端口
-c 指定监听数据包的数量
16:52:50 当前时间,精确到微秒
IP 192.168.3.21.54680 > server6.ssh:从具体数据包的信息和>表示流向
flags[.] :TCP 包中的标志信息,S是SYN标志的缩写,F(fIN),P(PUSH),R(RST),[.] 没有标记
seq: 数据包中的数据的顺序号
ack:下次期望的顺序号
win: 接受缓存的窗口大小
length:数据包长度
监听指定协议的数据包
常见协议:IP,arp、icmp、tcp、udp 等
2 nmap
网络探测工具/端口扫描器
nmap 命令是一款开放源代码的网络探测和安全审核工具,是network mapper 的缩写,器设计目标i是快速地扫描大型网络,nmap 可以发现网络上有那些主机,主机提供了什么服务,并探测操作系统的类型及版本信息
扫描目标可以为IP地址或子网地址等
参数说明
参数选项 | 解释说明 |
---|---|
-sS | TCP 同步扫描TCP SYN) |
-sT | TCP链接扫描 |
-sn | 不进行端口扫描,只检查主机正在运行,该选项与老板不的-sP相同 |
-sU | 扫描UDP端口 |
-sV | 探测服务器版本信息 |
-Pn | 只进行扫描,不ping主机 |
-PS | 使用SYN包对目标主机进行扫描,默认是80端口,也可以指定端口,格式为-PS22或-PS22-25,80,53等,PS和端口号之间没有空格 |
-PU | 使用UDP ping 扫描端口 |
-O | 激活对TCP/IP指纹特征的扫描,获得远程主机的标志,也就是操作系统类型 |
-v | 显示扫描过程的详细信息 |
-S |
设置扫描的源IP地址 |
-g port | 设置扫描的源端口 |
-oN | 把扫描的结果重定向到文件中 |
-iL filename | 从文件中读取扫描的目标 |
-p<端口> | 指定要扫描的端口,可以是一个单独的端口,也可以是用逗号分隔开的多个端口,或者使用"_"表示端口范围 |
-n | 不进行DNS解析,加快扫描速度 |
--exclude | 排除指定主机 |
--excludefile | 排除指定文件中的主机 |
3 ping
ping 命令可用于测试主机之间网络的连同性,执行ping 命令会使用ICMP传输协议,发送要求回应的消息,若远端网络功能没有问题,就会回应该信息,
ping [选项] [目标主机]
参数选项 | 解释说明 |
---|---|
-c <次数> | 指定发送ICMP报文的次数,否则将一直发送 |
-i <时间间隔> | 相邻两次发送报文的时间间隔,默认时间间隔是1s |
-n | 不查询主机名,直接显示IP地址 |
-q | 只显示命令开始时的信息和运行结束时的统计信息,忽略命令运行过程中出现的信息 |
-s<数据包大小> | 设置发送数据包的大小,默认大小为56字节,再加上8字节ICMP头部,一共是64字节ICMP包 |
-t <生存期> | 设置发送的数据包其生存期(TLL)的值 |
-w 截止时间 | 超过截止时间,立即退出ping程序 |
-W 超时时间 | 等待相应的超时时间 |
-c 3:发送3次ICMP包
-i 3:每次发包的时间间隔为3s
-s 1024: 设置发送的数据包大小为1024字节
-t 220,设置发送数据包的ttl值为220
三 Linux 进程管理命令
1 top
top 命令用于实时地对系统处理器状态进行监控,它能够实时的显示系统中各个进程的资源占用情况,该命令可以按照CPU的使用,内存的使用和执行时间对系统的任务进行排序显示,同时top 命令还可以通过交互式命令进行设定显示
top [选项]
后跟命令
参数选项 | 解释说明 |
---|---|
-b | 以批处理的模式显示进程信息,输出结果可以传输给其他程序或写入到文件中,这种模式下,top命令不会接受任何输入,一站式运行到直到达到-n选项设置的阈值,或ctrl+C终止 |
-c | 显示进程的整个命令路径,而不是只显示命令名称 |
-d | 指定每两次屏幕信息刷新之间的时间间隔 |
-H | 指定这个可以显示每个线程的情况,否则就是进程的总情况 |
-i | 不显示闲置或僵尸的进程信息 |
-n | top 输出信息的更新次数 |
-p | 显示指定的进程信息 |
交互式命令
交互式命令就是在top命令执行过程中使用的一些命令:
交互式命令 | 含义 |
---|---|
h 或 ? | 显示帮助信息,给出交互式命令的一些说明总结 |
Z | 全局颜色设置 |
B | 全局字体加粗设置 |
l(小写L) | 切换是否显示平均负载和启动时间信息 |
t | 切换是否显示进程和CPU状态信息 |
m | 切换是否显示内存信息 |
1(数字1) | 用于多核CPU监控,可监控每个逻辑CPU的运行状况 |
I | Irix/sokaris 模式 |
f | 从当前显示列表中添加或删除项目,按"f"键之后会显示列的列表,按"a-z"键即可显示或隐藏对应的列,最后按回车键确定 |
o | 该表top 输出信息中显示项目的顺序,按大小写的a-z 键可以将相应的列向右移动,而按大写的A-Z键可以将相应的列向左移动,最后按回车键确定 |
F或O | 选择排序的列 |
<,> | 移动选择排序的列。'<' 选择左临一列排序,'>'选择右临一列排序 |
R | 切换正常/反转顺序 |
H | 切换是否显示线程信息 |
c | 切换是够显示完整命令行和命令名称信息 |
i | 切换是够显示闲置进程和僵尸进程 |
S | 切换到累计模式 |
x | 以高亮的形式排序对应列,需要结合b/z 使用 |
y | 高亮运行的进程,需要结合b/z 使用 |
z | 打开/关闭颜色 |
b | 打开/关闭加粗 |
u | 显示指定用户相关的进程信息 |
n或# | 设置显示进程的最大行数 |
k | 终止一个进程,系统将提示用户输入一个需要终止进程的PID |
r | 重新设置一个进程的优先级,系统提示用户输入需要该变的进程PID,以及需要设置的优先级值,输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先级,默认值是10 |
d或s | 改变top输出信息两次刷新的时间,系统将提示输入新的时间,单位为s,如果是小数,则换算成ms,如果是0,则系统不停刷新,默认刷新时间是3s,如果设置太小,则可能会造成系统负载过大 |
W | 将当前top 设置写入"~/.toprc"文件中 |
q | 退出top显示 |
显示说明
第一行:任务队列信息,同uptime命令执行结果
第二行:tasks为任务(进程),系统现有进程115个,处于运行状态的1个,正在休眠的114个,stoped状态0个,zombie(僵尸)的0个
第三行:CPU状态信息
us 用户占用CPU比例
sy 内核占用cpu比例
ni 改变过优先级的进程占用CPU的百分比
id 空闲CPU的百分比
wa I/O等待占用CPU的百分比
ni 硬中断(hardware IRQ)占用CPU的百分比
si 软中断software interrupt)占用CPU的百分比
st 虚拟机占用CPU的百分比
第四行:内存状态
total 物理内存总量
used 使用中的内存总量
free 空闲内存总量
buffers 缓冲的内存总量
第五行:swap 交换分区信息
total 交换分区总量
used 使用的交换分区量
free 空闲的交换分区量
cached 缓存的内存量
第六行: 空行
第七行:各进程的状态监控
PID : 进程ID
USER: 进程所有者
PR:进程优先级
NI :nice 值,负值表示高优先级,正值表示低优先级
VIRT: 进程使用的虚拟内存总量。单位为kb
RES: 进程使用的、未被换出的物理内存发小,单位为kb
SHR:共享内存大小,单位为kb
S: 进程状态,D= 不可中断的睡眠状态、 R= 运行、 S=睡眠 、T =跟踪/停止 、 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位为1/100秒
COMMAND 进程名称(命令名/命令行)
2 ps
ps命令用于列出执行ps命令时刻的进程快照,要想动态信息,就需要使用top命令
ps [选项]
参数选项 | 解释说明 |
---|---|
-a | 显示所有终端下执行的进程 |
a | 显示与终端相关的所有进程,包含每个进程的完整路径 |
x | 显示与终端无关的所有进程 |
u | 显示进程的用户信息 |
-u | 显示指定用户相关的进程信息 |
-e | 显示所有进程 |
-f | 额外显示UID,PID,C与STIME 的栏位 |
f | 显示进程树 |
-H | 显示进程树 |
-I | 以详细的格式来显示进程的状态 |
-o | 自定义输出指定的字段,以逗号分隔 |
--sort key | key表示为指定字段排序,默认为升序,+key为升序,-key 为降序 |
PID 是进程的标识号
TTY 是进程所属的终端控制台
TIME 列是进程所使用的总的CPU时间
CMD 列是正在执行的命令行
UID:进程拥有者
PID:进程标识号
PPID: 进程父进程标识号
C: CPU 使用资源百分比
STIME:进程开始时间
TTY: 该进程是在哪个终端机上面运行,若与终端机无关,则显示[?],另外,tty1-tty6是本机面的登录者进程,若为pts/0,则表示有网络连接进主机的进程
TIME: 进程所使用的总的CPU时间
CMD:正在执行的命令行
常用组合命令
USER :该进程所属的用户
PID: 进程的进程号
%CPU:该进程使用掉的CPU百分比
%MEM:该进程所占用的物理内存的百分比
VSZ: 该进程使用掉的虚拟内存量(单位kbytes)
RSS: 该进程占用的固定的内存量(单位为kbytes)
TTY: 该进程是在哪个终端机上运行
STAT: 该进程目前状态
R: 正在运行
S: 正在睡眠或者可以运行
D: 不可中断睡眠
T: 正在侦测或者是停止了
Z :已经终止,但是其父进程无法正常终止他,从而编程僵尸进程
+: 前台进程
I: 多线程进程
N:低优先级进程
'<':高优先级进程
s: 进程领导者
L:已将页面锁定到内存中
START:该进程被触发启动的时间
TIME:该进程实际使用的CPU运作的时间
COMMAND: 该进程的实际命令
以详细格式显示进程状态
参数详解:
F:代表这个进程的标志,4 代表使用者为super user。
S:代表这个进程的状态为stat
C:代表CPU使用率百分比
PRI: 优先级
NI:nice值
ADDR:指出该进程在内存的那个部分,如果是个running,则一般是[-]
SZ: 使用掉的内存大小
WCHAN: 目前这个进程是否正在运行中,若是则为[-]
3 kill 和killall
终止进程
kill [选项] [进程号]
参数选项 | 解释说明 |
---|---|
-l | 列出全部信号名称 |
-p | 指定kill 命令只打印相关的进程号,而不发送任何信号 |
-s | 指定要发送的信号 |
常用信号说明
信号 | 说明 |
---|---|
HUP(1) | 挂起,通常因终端掉线或用户退出而引发的 |
INT(2) | 中断,通常是按下CTRl+c组合键来发出这个信号 |
QUIT(3) | 退出,通常是按下CRTL+\组合键发出此信息号 |
kill(9) | 立即结束进程的运行 |
TERM(15) | 终止,通常在系统关机时发送 |
TSTP(20) | 暂停进程运行,通常是按下CTRL+Z组合键发出这个信号 |
kill 默认使用的信号为15,用于结束进程,如果进程忽略此信号,可以使用信号9强制终止进程
在kill中有一个特殊信号值为0,其中-0 表示不发送任何信号,但仍然会对对应的进程进行检查,如果$pid对应的进程已经存在,则返回0,否则返回1
killall 通过进程名终止进程
killall [选项] [进程名]
参数选项 | 解释说明 |
---|---|
-e | 对于很长的名字,要求能够准确匹配,默认,如果一个进程名的长度超过了15个字符,则无法使用整个名字了,这种情况下,killall会终止所有匹配名字前15个字符的所有进程,而-e参数的作用是模糊匹配,如果同时指定了-v选项,则killall会针对每个忽略的记录打印一条消息 |
-I | 不区分大小写匹配 |
-g | 终止属于该进程组的进程 |
-i | 在终止进程之前询问是否确认 |
-q | 如果没有进程终止则不提示 |
-r | 使用正则表达式匹配要终止的进程名称 |
-s | 用指定的信号代替默认信号 |
-u | 终止指定用户的进程 |
-v | 报告信号是否发送成功 |
-w | 等待所有被终止的进程死去,killall 每秒会检查一次被终止的进程是否仍然存在,其仅在都死光后才返回。 |