Linux性能监控工具和进程管理命令
1. CPU监控工具--top
1. top工具 动态查看进程变化,监控linux的系统状况

第一行:同uptime命令的结果一样。
13:31:37 当前时间
up 41 days,19:38 系统运行时间
1 user 当前登录用户数
load average: 0.00 0.00 0.00 系统负载,任务队列的平均长度。三个数值分别为1分钟,5分钟,15分钟。
第二行:进程信息。
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
第三行:cpu信息。
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待输入输出的CPU时间百分比
hi 硬中断(Hardware IRQ)占用CPU的百分比
si 软中断(Software Interrupts)占用CPU的百分比
st (Steal time) 是当 hypervisor 服务另一个虚拟处理器的时候,虚拟 CPU 等待实际 CPU 的时间的百分比。
第四行:内存信息。
total 物理内存总量
used 使用的物理内存总量
free 空闲内存总量
buffers 用作内核缓存的内存量
第五行:swap交换分区
total 交换区总量
used 使用的交换区总量
free 空闲交换区总量
cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
第六行:进程信息区
PID 进程id
PPID 父进程id
RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
2. top参数
-d 后接秒数,指定每两次屏幕信息刷新之间的时间间隔,表示进程界面更新时间(默认为5秒)。
当然用户可以使用s交互命令来改变之。
-b,-n搭配,批次执行top ——> top -b -n 2 > /tmp/top.txt #将top进程表在/tmp/top.txt中打印2次。
-p 通过指定监控进程ID来仅仅监控某个进程的状态。 ——> top -p 1 #查看进程号为1的进程。
-q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
-S 指定累计模式
-s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
-i 使top不显示任何闲置或者僵死进程。
-c 显示整个命令行而不只是显示命令名
3. top实战场景
a. 2500毫秒刷新一次TOP内容,总共5次,输出内容存放到performace.txt文件中
# top -b -d 2.5 -n 5 > performace.txt
注:要将内容输出到文件中,必须使用-b,表示批处理选项
b. TOP命令如何快速按%CPU、%MEM、TIME+列排序
a). %CPU:使用大写字母按键:P
b). %MEM:使用大写字母按键:M
c). TIME+:使用大写字母按键: T
注:TOP默认排序为倒序,如果确实需要升序排序,可以使用大写字母按键:R
c. TOP命令中显示其它列值、将两列互换等
a). 选择显示列或隐藏列:使用小写字母按键:f
c). 交换列显示顺序:使用小写字母按键: o
b). 选择需要排序的列:使用大写字母按键:F
2. CPU监控工具--sysstat
1. 安装sysstat工具
yum install sysstat -y
2. mpstat命令
3. 内存监控工具
1. free -m
2. vmstat
vmstat [option] [delay(count)]
vmstat 2 3 每2s执行一次,共3次

procs
r 等待运行的进程个数,CPU上等待运行的任务和队列长度,如果等待运行的进程数越多,意味着CPU非常繁忙。如果该参数长期大于和等于逻辑CPU个数,则CPU资源可能存在较大的瓶颈。
b 被阻塞的任务队列长度
memory
swpd 交换内存的使用总量
free 空闲的物理内存总量
buffer 用于buffer的内存总量
cache 用于cache的内存总量
swap
si 每秒进入swap的数据量,以kb/s为单位
so 每秒离开swap的数据量,以kb/s为单位
si/so的值太大,系统性能很差
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。
当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,这个是不正确的。不能光看这一点,还要结合si和so,
如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
io
bi 从块设备读入数据到内存kb/s
bo 保存数据至块设备的速率kb/s
这两个值大,说明系统的I/O繁忙
system
in 每秒多少个中断
cs 上下文切换的速率
代表系统与接口设备交换频繁
cpu
us 用户层百分比
sy 内核层百分比
id 空闲百分比
wa 等待IO百分比
st 被盗用的CPU百分比
vmstat -s 显示内存统计数据
vmstat -d 显示磁盘统计数据
4. 硬盘监控工具
1. 指标
IOPS: 每秒I/O次数
顺序IO:
随机IO
2. df -h
3. iotop命令
安装: yum install iotop -y
iotop一个用来监视磁盘I/O使用情况。
--version #显示版本号
-h, --help #显示帮助信息
-o, --only #显示进程或者线程实际上正在做的I/O,而不是全部的,可以随时切换按o
-b, --batch #运行在非交互式的模式
-n NUM, --iter=NUM #在非交互式模式下,设置显示的次数,
-d SEC, --delay=SEC #设置显示的间隔秒数,支持非整数值
-p PID, --pid=PID #只显示指定PID的信息
-u USER, --user=USER #显示指定的用户的进程的信息
-P, --processes #只显示进程,一般为显示所有的线程
-a, --accumulated #显示从iotop启动后每个线程完成了的IO总数
-k, --kilobytes #以千字节显示
-t, --time #在每一行前添加一个当前的时间
-q,
--quiet #suppress some lines of header (implies --batch). This option
can be specified up to three times to remove header lines.
-q column names are only printed on the first iteration,
-qq column names are never printed,
-qqq the I/O summary is never printed.

常用命令: iotop -oP
4. iostat
yum install sysstat -y
iostat 主要有三个操作箱,options 操作项,interval指定统计时间间隔,count总共输出次数

-c: 查看cpu状态
-k:
参考文档 https://www.cnblogs.com/xiuluo--angel/p/7086637.html
5. pidstat命令
pidstat -d 1 间隔1秒执行一次
5. 网络监控工具
1. iftop命令
用来监控网卡的实时流量。
2. 安装iftop
yum install iftop -y
3. 编译安装iftop
cd /usr/local/src wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz tar xvf iftop-0.17.tar.gz cd iftop-0.17 ./configure --prefix=/usr/local/iftop make make install
错误:can't find pcap.h
解决:yum install libpcap-devel -y
错误:Can't find a curses library supporting mvchgat
解决: yum install ncurses-devel
添加系统环境变量
export IFTOP_HOME=/usr/local/iftop
export PATH=$IFTOP_HOME/sbin:$PATH
4. iftop的使用
1. 运行iftop。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
2. iftop相关参数
-i设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n使host信息默认直接都显示IP,如:# iftop -n
-N使端口信息默认直接都显示端口号,如: # iftop -N
-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h(display this message),帮助,显示参数信息
-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b使流量图形条默认就显示;
-f这个暂时还不太会用,过滤计算包用的;
-P使host信息及端口信息默认就都显示;
-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
3. iftop画面的一些操作命令
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。
4. 常用iftop命令
iftop -npP
iftop -i eth1 -npP
6. 进程管理工具
1. pstree 显示进程树
安装: yum install -y psmisc
centos6: 根进程为init
centos7: 根进程为systemd
2. ps 显示当前进程的快照
1. ps的选项有三种风格
UNIX 必须带有一个-
BSD 必须不带有-
GNU 必须带有两个--
2. BSD风格
ps a 与终端无关的进程
ps x 与终端相关的进程
ps u 以用户为中心的进程信息
ps aux 显示所有进程信息

USER: 哪个用户使用该进程
PID: 进程号
%CPU 进程使用CPU百分比
%MEM 进程使用内存百分比
VSZ 进程使用的虚拟内存使用量(单位KB)
RSS 常驻内存使用量(单位KB)
TTY 使用哪个终端,没有终端显示?
STAT 进程状态(R:运行,S:可中断,D:不可中断,T:停止,Z:僵尸进程,+:前台进程,l:多线程进程,N:低优先级进程,<高优先级进程,s:session leader在它之下有子进程)
START 开始时间
TIME 实际运行的时间
COMMAND
ps axo pid,%cpu,%mem,command 自定义显示哪些字段
3. UNIX风格
ps -e: 显示所有进程
ps -f: 完整显示进程信息
ps -ef

C: cpu使用率
STIME: 进程启动时间
TIME: 进程累积时间
ps -F: 与-f几乎完全相同
ps -eo pid,ppid,%cpu,%mem 自定义显示字段
4. ps实战例子
查看系统中占用内存最高的进程
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz | head -10
查看系统中的僵尸进程
ps -e -o stat,ppid,pid,cmd|egrep '^[Zz]'
ps:ps命令用于获取当前系统的进程信息.
-e:参数用于列出所有的进程
-o:参数用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程pid)、pid(当前进程的pid),cmd(即进程的可执行文件。
egrep:是linux下的正则表达式工具
'^[Zz]':这是正则表达式,^表示第一个字符的位置,[Zz],表示z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因为僵尸进程的状态信息以Z或者z字母开头。
3. kill 终止一个进程
每个信号的标识方法
1. 使用数字标识 -1 -9
2. 使用信号全程标识 -SIGHUP
3. 使用信号简称标识 -HUP
-l: 显示当前系统可用信号
常用信号
1. 1) SIGHUP: 无须关闭进程而让其重读配置文件
2. 2) SIGINT: 相当于ctrl+c ,中断正在运行的进程
3. 9) SIGKILL: 杀死运行中的进程(残忍)
4. 15) SIGTREM: 终止运行中的进程(优雅)
5. 18) SIGCONT: 唤醒停止的进程
4. killall 进程名称
killall httpd 父进程和子进程都会被杀掉

浙公网安备 33010602011771号