一 CPU 性能监控工具

1 vmstat ,系统自带

linux 系统运维小工具
procs 列 :
r 列: 表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU核数,说明CPU不足,需要增加CPU,其中的CPU指的是逻辑CPU
查看CPU总核数 :
linux 系统运维小工具

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 
linux 系统运维小工具_第1张图片
3 表示3秒间隔 
5 表示显示5次 
inact 表示非活跃的内存大小
active 表示活跃的内存大小

范例2 显示内存详细信息
linux 系统运维小工具_第2张图片

范例3 查看磁盘读/写 
linux 系统运维小工具_第3张图片

2 iostat 需要安装

iostat 是I/O statistics(输入/输出)的缩写,其主要功能是对系统磁盘I/O操作进行监视,它的主要是显示磁盘读写操作的统计信息,同时也会给出CPU的使用情况。
linux 系统运维小工具_第4张图片

语法格式 
iostat [选项] [ 时间间隔 [次数]]

参数选项 解释说明
-c 显示CPU的使用情况
-d 显示磁盘的使用情况
-k 每秒以kB为单位显示数据
-m 每秒以MB 单位显示数据
-n 显示NFS 的使用情况
-t 显示每次统计执行的时间
-p device 指定要统计的磁盘设备名称,默认为所有磁盘
-x 显示扩展统计

linux 系统运维小工具_第5张图片
%user :用户进程消耗CPU时间百分比
%nice:改变优先级的进程占用CPU时间百分比
%system: 系统内核进程消耗的CPU时间百分比
%iowait:IO等待所占中的CPU时间百分比
%steal:虚拟机强制CPU等待时间百分比
%idle: CPU空闲状态的时间百分比

linux 系统运维小工具_第6张图片

tps:表示该设备每秒传输次数,一次传输的意思是一次I/O请求,多个逻辑请求可能会被合并成一次I/O请求

Blk_read/s:表示每秒读取的数据块数
Blk_wrtn/s:表示每秒写入的数据块数
Blk_read: 表示读取的所有块数
Blk_wrtn: 表示写入的所有块数

只显示磁盘信息
linux 系统运维小工具_第7张图片

linux 系统运维小工具_第8张图片

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 显示指令的版本信息

实例
linux 系统运维小工具
linux 系统运维小工具

内容说明:
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 显示系统交换活动在采样时间内的状态

安装软件包 
linux 系统运维小工具_第9张图片
查看CPU相关信息:
linux 系统运维小工具_第10张图片
kbmemfree : 空闲物理内存量
kbmemused: 使用中的物理内存量
%memused: 物理内存的使用率
kbbuffers: 内存中作为缓冲区使用的物理内存容量
kubcached:内核中作为缓存使用的物理内存容量
%xommit:应用程序当前的内存大小占大小的使用百分比

显示缓冲区的使用情况:
linux 系统运维小工具_第11张图片
tps: 每秒物理设备的I/O传输总量
rtps:每秒从物理设备读入的数据总量
wtps:每秒向物理设备写入的数据总量
bread/s:每秒从物理设备读入的数据量,单位为块/s。
bwrtn/s:每秒向物理设备写入的数据量,单位同上

显示网络的运行状态

linux 系统运维小工具_第12张图片
IFACE:网络接口
rxpck/s:每秒中接受的数据包
txpck/s:每秒中发送的数据包
rxkB/s: 每秒钟接受的字节数
txkB/s:秒钟发送的字节数
rxcmp/s:每秒中接受的压缩数据包
txcmp/s:秒钟发送的压缩数据包
rxmcst/s:每秒中接受的多播数据包

显示网络错误的统计数据
linux 系统运维小工具_第13张图片

IFACE:网络接口
rxerr/s: 每秒中接受的坏数据包
txerr/s:每秒钟发生的坏数据包
coll/s:每秒的冲突数
rxdrop/s: 因为缓冲充满,每秒钟丢弃的已经接收的数据包数
txdrop/s:因为缓冲充满。每秒中丢弃已经发送的数据包数 
txcarr/s: 发送数据包时,每秒载波错误数
rxfram/s:每秒接受数据包的帧对其错误数
rxfifo/s: 接受的数据包每秒FIFO过速的错误数
txfifo/s: 发送的数据包每秒FIFO过速的错误数。

显示套接字信息
linux 系统运维小工具_第14张图片
totsck:使用套接字总数量
tcpsck: 使用TCP套接字数量
udpsck:使用UDP套接字数量
rawsck:使用raw 套接字数量
ip-frag:使用IP段数量
tcp-tw:处于TIME_WAIT状态的TCP套接字数量

查看系统磁盘读写性能
linux 系统运维小工具_第15张图片

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 显示更加相信的输出

1 安装TCPDUMP
linux 系统运维小工具_第16张图片

实例 :
linux 系统运维小工具_第17张图片
-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地址
linux 系统运维小工具_第18张图片
监听固定的端口号 
linux 系统运维小工具_第19张图片

监听指定协议的数据包
linux 系统运维小工具_第20张图片
常见协议:IP,arp、icmp、tcp、udp 等

2 nmap

网络探测工具/端口扫描器
nmap 命令是一款开放源代码的网络探测和安全审核工具,是network mapper 的缩写,器设计目标i是快速地扫描大型网络,nmap 可以发现网络上有那些主机,主机提供了什么服务,并探测操作系统的类型及版本信息

软件安装
linux 系统运维小工具_第21张图片
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 排除指定文件中的主机

查看主机当前开放的端口
linux 系统运维小工具_第22张图片
扫描主机的特定端口
linux 系统运维小工具_第23张图片

扫描一个网段
linux 系统运维小工具_第24张图片

3 ping

ping 命令可用于测试主机之间网络的连同性,执行ping 命令会使用ICMP传输协议,发送要求回应的消息,若远端网络功能没有问题,就会回应该信息,

ping [选项] [目标主机]

参数选项 解释说明
-c <次数> 指定发送ICMP报文的次数,否则将一直发送
-i <时间间隔> 相邻两次发送报文的时间间隔,默认时间间隔是1s
-n 不查询主机名,直接显示IP地址
-q 只显示命令开始时的信息和运行结束时的统计信息,忽略命令运行过程中出现的信息
-s<数据包大小> 设置发送数据包的大小,默认大小为56字节,再加上8字节ICMP头部,一共是64字节ICMP包
-t <生存期> 设置发送的数据包其生存期(TLL)的值
-w 截止时间 超过截止时间,立即退出ping程序
-W 超时时间 等待相应的超时时间

linux 系统运维小工具_第25张图片

-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显示

显示说明
linux 系统运维小工具_第26张图片
第一行:任务队列信息,同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 为降序

linux 系统运维小工具
PID 是进程的标识号
TTY 是进程所属的终端控制台
TIME 列是进程所使用的总的CPU时间
CMD 列是正在执行的命令行

linux 系统运维小工具_第27张图片

UID:进程拥有者
PID:进程标识号
PPID: 进程父进程标识号
C: CPU 使用资源百分比
STIME:进程开始时间
TTY: 该进程是在哪个终端机上面运行,若与终端机无关,则显示[?],另外,tty1-tty6是本机面的登录者进程,若为pts/0,则表示有网络连接进主机的进程
TIME: 进程所使用的总的CPU时间
CMD:正在执行的命令行
常用组合命令
linux 系统运维小工具_第28张图片

USER :该进程所属的用户
PID: 进程的进程号
%CPU:该进程使用掉的CPU百分比
%MEM:该进程所占用的物理内存的百分比
VSZ: 该进程使用掉的虚拟内存量(单位kbytes)
RSS: 该进程占用的固定的内存量(单位为kbytes)
TTY: 该进程是在哪个终端机上运行
STAT: 该进程目前状态
R: 正在运行
S: 正在睡眠或者可以运行
D: 不可中断睡眠
T: 正在侦测或者是停止了
Z :已经终止,但是其父进程无法正常终止他,从而编程僵尸进程
+: 前台进程
I: 多线程进程
N:低优先级进程
'<':高优先级进程
s: 进程领导者
L:已将页面锁定到内存中

START:该进程被触发启动的时间
TIME:该进程实际使用的CPU运作的时间
COMMAND: 该进程的实际命令

以详细格式显示进程状态
linux 系统运维小工具
参数详解:
F:代表这个进程的标志,4 代表使用者为super user。
S:代表这个进程的状态为stat 
C:代表CPU使用率百分比
PRI: 优先级 
NI:nice值
ADDR:指出该进程在内存的那个部分,如果是个running,则一般是[-]
SZ: 使用掉的内存大小
WCHAN: 目前这个进程是否正在运行中,若是则为[-]

3 kill 和killall

终止进程
kill [选项] [进程号]

参数选项 解释说明
-l 列出全部信号名称
-p 指定kill 命令只打印相关的进程号,而不发送任何信号
-s 指定要发送的信号

linux 系统运维小工具_第29张图片
可以使用-l(小写L)进行参数信号和数字信号之间的转换
linux 系统运维小工具

常用信号说明

信号 说明
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 每秒会检查一次被终止的进程是否仍然存在,其仅在都死光后才返回。