进程监控类命令
进程监控类命令
本篇全是命令介绍,笔者把各个命令的都实验一遍,给同学们看看.
一. PSTREE命令
pstree - display a tree of processes
选项:
-p 显示进程的PID
-T 隐藏线程信息
-u 显示切换过程
-H PID 高亮显示指定PID进程的父进程
示例:
二. PS命令
ps - report a snapshot of the current processes.
选项:
PS有三种风格的选项写法:
BSD风格写法 ps aux
UNIX风格写法 ps -ef
GNU风格写法 ps --pid PID
BSD风格选项:
a 显示所有与终端有关的进程
x 显示所有与终端无关的进程
u 显示进程所有者相关的信息
f 命令列把相关的进程显示成进程树
k 对属性进行排序,属性前加上-表示倒序
o 选择显示的字段pid cmd psr ni(nice) pri rtprio tid class %cpu %mem user ruser euser等等
euser 表示显示有效用户字段
ruser 表示显示真是用户字段
psr 表示显示CPU与进程的绑定关系
pcpu CPU的利用率
ppid 父进程的PID
pri 系统优先级值
ni NICE优先级
rtprio 表示显示实时优先级
L 显示支持的字段
UNIX风格选项:
-e 显示所有进程
-f 显示完整格式程序信息
-F 显示更完整格式程序信息
-H 以进程层级格式显示进程相关信息
-u userlist 指定有效用户ID
-U userliset 指定真正用户ID
-g gid 指定有效的gid
-G gid 指定真的很的gid
-p PID 显示指定pid的进程
-t TTY 显示指定TTY终端的进程,相当于BSD风格的t选项
GNU风格选项:
--sort 等同于BSD风格的k选项,对指定属性进行排序,-表示倒序显示
--ppid 等同与UNIX风格的-p选项,指定显示某PID的进程
字段介绍:
USER 那个用户执行的命令
PID 进程的PID
%CPU CPU占用的百分比
%MEM 内存占用百分比
VSZ 是申请的内存(占用的虚拟内存大小)
RSS 是实际使用内存(指的是常驻内存中的大小.不包括交换分区中的)
TTY 哪个终端启动的
STAT 状态信息
START 什么时间启动的
TIME 使用时间片的累计值
COMMAND 命令
带中括号的表示内核的线程
PPID 父进程的PID
C CPU的占用百分比
SIIME 启动时间
PSR 运行在哪个CPU核心上
STAT进程状态:
R 运行态
S (大写S)可打断的睡眠态 interruptable sleeping
D 不可打断的睡眠态 uninterruptable sleeping
T 停止态stopped
Z zombie僵尸态
s (小写s)会话的发起者,子进程的创建者
+ 前台进程,运行在终端上的并且占据命令提示符的
I 空闲内核线程(大写i)
l 多线程进程(小写的L)
< 高优先级进程
N 低优先级进程
示例:
EXAMPLES
To see every process on the system using standard syntax:
ps -e
ps -ef
ps -eF
ps -ely
To see every process on the system using BSD syntax:
ps ax
ps axu
To print a process tree:
ps -ejH
ps axjf
To get info about threads:
ps -eLf
ps axms
To get security info:
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM
To see every process running as root (real & effective ID) in user format:
ps -U root -u root u
To see every process with a user-defined format:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -Ao pid,tt,user,fname,tmout,f,wchan
三. PRTSTAT命令
prtstat PID 显示指定PID进程的相信信息
示例:
四. nice命令
nice命令只能调整非实时优先级
nice的调整优先级的范围是-20~19,对应的系统优先级就是100~139
nice -n # COMMAND 以指定的优先级来启动进程
选项-n 最好不要省略
普通用户只能往后调整优先级,root即可以提高优先级,也可以降低优先级
五. renice命令
renice 同样也只能调整非实时优先级,
renice只能调整正在运行的进程的优先级
renice的调整范围还是-20~19,即使超出了也不会报错,但是最大是19
renice -n # PID 重新调整指定PID进程的优先级
选项-n 可以省略
六. pgrep命令
pgrep [options] pattern
选项:
-u uid 根据UID查询进程,UID是指生效用户的UID
-U uid 根据UID查询进程,UID是指真正进程发起者的UID
-t 终端 根据指定终端查找进程
-l 显示出进程名
-a 显示完整格式的进程名
-P PID 限制指定PID进程的子进程
示例:
七. pidof命令
根据进程名查找进程的PID
pidof [OPTION] COMMAND
选项:
-x 根据脚本名称查找PID
示例:
八. uptime命令
负载查询
系统启动时长
空闲进程的总时长
当前时间
当前上线人数
系统平均负载
CPU的个数*3 这个数字超过5就很忙了
九. mpstat命令
详细统计了CPU的使用情况,
mpstat # ## 可以每#秒刷新一下,一共统计##次
十. top命令
动态追踪进程信息
选项:
-d # 指定刷新间隔为#秒
-n # 指定刷新次数为#次
-b 以批次的方式显示
交互式命令:
M 按照内存排序
P 按照CPU排序
T 按照时间片累计进行排序
l 显示或隐藏top的第一行
t 显示或隐藏top的第二行第三行
1 汇总显示CPU还是分开显示CPU核心
m 显示或隐藏TOP的第四行第五行
q 退出
s 调整刷新间隔
k 终止进程
W 另存为文件
top - 05:45:41 up 1 day, 8:54, 1 user, load average: 0.00, 0.00, 0.00
# 当前时间 运行时长 当前登录用户数 平均负载 过去1分钟 5分钟 15分钟的平均队列长度
Tasks: 181 total, 1 running, 180 sleeping, 0 stopped, 0 zombie
# 一共的进程数 正在运行数 睡眠进程数 停止进程数 僵死进程数
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# 用户空间 系统空间 NICE 空闲 等待IO 硬件中断 软件中断 被虚拟程序偷走的
MiB Mem : 957.1 total, 147.3 free, 211.6 used, 598.1 buff/cache
# 总内存大小 空闲内存大小 已使用内存 用于缓冲和缓存的内存空间
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 592.1 avail Mem
# 总交换空间 空闲交换空间 已使用交换空间 可用内存空间
十一. HTOP命令
增强版的top命令,需要额外安装.而且最最重要的,竟然支持鼠标操作.而且还支持搜索
-d # 指定刷新间隔
-u USERNAME 仅显示指定用户的进行
-s COLUME 以指定字段进行排序
-h 人性化显示
-m 以M为显示单位
-g 以G为显示单位
交互式选项:
H 显示或隐藏线程
K 显示或隐藏内核线程,默认是隐藏的
P 以占用CPU百分比排序
M 以占用内存百分比排序
T 以使用时间片累计时长排序
l 显示指定进程打开的文件列表
s 追踪进程发起的系统调用
t 以树状结构显示进程父子关系或者使用F5键
a 将选定的进程绑定指定的CPU核心
看到有没有眼前一亮的感觉.真的太好用了.推荐大家使用安装,资源管理的三板斧不是白叫的.
十二. free命令
显示交换分区和内存空间的使用情况
选项:
-h 人性化显示
-m 以M为单位显示
-g 以G为单位显示
-b 以字节为单位显示
-o 隐藏不显示cache/buffer行,在centos6及以前版本有效
-s # 指定刷新间隔
-c # 指定刷新次数
十三.PMAP命令
pmap PID 查看指定进程的物理内存映射表
pmap命令实际上就是调用了/proc/PID/maps文件的内容.只不过这个文件不太好理解.使用pmap命令来简化查看过程
十四.strace命令
stracem COMMAND 用来追踪COMMAND命令执行过程中产生的系统调用
十五.ltrace命令
ltrace COMMAND 查看COMMAND命令在执行时调用了那些库文件
strace和ltarce建议好好学学,避免成为背锅侠
十六.vmstat命令
查看虚拟内存的情况
选项:
vmstat # ## 间隔#秒刷新一次 一共显示##次
-s 汇总
字段介绍:
procs
r 等待运行的进程个数,也就是CPU等待运行的队列长度
b 处于不可中断睡眠的进程个数,被阻塞的任务队列的长度.如果这个数字很大,可能等待IO数很大
memory
swpd 交换内存使用的总量,如果这个swpd的有使用,或者有增长趋势就说明内存不够用了.
free 空闲的内存总量
buffer 用于缓冲内存总量
cache 用于缓存内存总量
swap
si: Amount of memory swapped in from disk (/s).从磁盘中交换进内存的内存量,参照物是内存
so: Amount of memory swapped to disk (/s).从内存中交换至磁盘的内存量,参照物是内存
io
bi: Blocks received from a block device (blocks/s).以内存为参照物,从磁盘写入到内存
bo: Blocks sent to a block device (blocks/s).以内存为参照物,从内存输出到磁盘
system
in 平均每秒钟的中断次数 interrupt
cs 进程切换速率 context switch
cpus
us 用户空间中进程占用CPU的百分比
sy 内核占用CPU的百分比
id 空闲时段消耗的CPU百分比
wa 消耗在等待IO操作完成时消耗CPU的百分比
steal 虚拟程序(偷走的)消耗的cpu百分比
备注:vmstat命令也是通过查看/proc目录下内核输出的参数来统计各个进程的相关数据
十七.IOSTAT命令
iostat # ## 指定刷新间隔为#秒,指定刷新次数##次
选项:
-c 仅显示CPU统计信息
-d 仅显示硬盘统计信息
-x 显示更加详细的统计信息,包括CPU和硬盘的
-k 以K为单位显示
-m 以M为单位显示
字段介绍:
kB_read/s 读的速率
kB_wrtn/s 写的速率
kB_read 读的总量
kB_wrtn 写的总量
十八.DSTAT命令
dstata命令默认是每秒刷新一次的.带颜色显示.同时强大到没有朋友的工具
dstat # ## 指定刷新时间为#秒,指定刷新次数为#次
选项:
-c 仅显示CPU信息
-C # 显示在哪个CPU核心上的信息
-d 仅显示硬盘信息
-n 仅显示网络流量信息
-g 仅显示内存页信息
-y 显示系统有关信息,包括中断和进程切换速率
-i 显示软硬中断
-m 显示内存相关
-p 显示进程统计信息
-r 显示IO请求信息
-s 显示swap信息
-t 输出当前时间
-v 等同与vmstat输出结果
--tcp 显示tcp相关数据
--udp 显示Udp相关数据
--raw 显示raw相关数据
--top-cpu 显示最占用cpu的进程
--top-io 显示最占用Io的进程
--top-mem 显示最占用内存的进程
--top-latency 显示延迟最大的进程
示例:
十九.IOTOP命令
前线一些工具都是一些综合类型的工具,什么都能监控,单有好像专一了又不太满足需求,向iostat命令,只能查看到磁盘的读写很高,但是就是不知道哪个程序带来的大IO.这个款专一好男人的工具iotop
iotop命令可以不停的刷新显示当前那些进程频繁读写.放张图片看看
第一行是磁盘的读写的总速率
第二行是实际产生的读写速率
第三行参数如下:
TID 线程ID,这里默认的TID,可是使用交互命令p切换成PID的显示
PRIO 优先级,
USER 进程发起者
DISK READ 磁盘读速率
DISK WRITE 磁盘写速率
SWAPIN 交换分区写入速率
IO IO等待的百分比
有一个很有意思的设定,第三行上有一个<或者>,这说明正在以这一行进行排序
大于号表示降序序排序
小于号表示升序排序
可以使用r键进行切换
交互式选项:
left和right方向键 可以改变排序列
r 方向排序
o 只实际上有IO请求的线程
p 在PID和TID之间进行切换,默认是TID显示
i 改变线程或进程的优先级
q 退出
选项:
-o 只显示正在产生IO请求的进程
-b 以批形式显示,非交互式模式,主要用作与记录在文件
-t 加上时间戳,主要用作记录日志
-n # 需要结合-b一起使用,显示几批次,同样主要用来记录日志,如果不指定# 表示无限次
-d # 指定刷新间隔,默认刷新是1秒
-p PID 指定监控的进程
-u USER 指定监控哪个用户的进程
-P 以进程的方式显示,默认是线程TID
-q 只在第一次检测时显示列名和IO汇总,主要用于记录日志
-qq 永远不显示列名,但是还显示IO汇总,主要用作记录日志
-qqq 列名和IO汇总都不显示,主要用作记录日志
示例
二十.IFTOP命令
监控网络链接和流量
选项:
-n 以数字方式显示
二十一.NLOAD命令
监控网络链接和流量
选项:
-t # 指定刷新间隔
-u {h|b|k|m|g|H|B|K|M|G} 指定显示单位
h:auto b:Bit/s k:kBit/s m:mBit/s g:gBit/s
H:auto B:Byte/s K:kByte/s M:mByte/s G:gByte/s
二十二.LSOF命令
lsof:list open files 查看当前系统正在使用的文件,在linux中一切皆文件,所以通过lsof命令不仅可以查看正在使用的普通文件,还可以访问套接字等等,无比强大的工具.
查看当前系统文件的工具,跟踪某个进程正在使用哪个文件
可以利用losf恢复已经删除的文件,前提这个文件正在访问
选项:
-a 列出打开文件的进程
-c COMMAND 列出指定进程打开的文件,这里跟的是进程名
-g GID 列出GID用户的进程详情
-d 文件号 列出占用该文件号的进程
+d 目录 列出目录下被打开的文件
+D 目录 递归列出目录下被打开的文件
-n 目录 列出使用NFS的文件
-i 条件 列出符合条件的进程
4 显示IPV4的进程
6 显示ipv6的进程
:80 显示占用80端口的进程
@IPADDR 显示和IPADDR链接的进程
-p PID 列出指定PID进程所打开的文件
-u UID 列出UID用户的进程锁使用的文件
-n 不反向解析
}
小技巧:
利用lsof找回误删除且正在被打开的文件.
第一步,现在终端持续打开一个文件,模拟这个文件正在被使用
第二步,在终端二上删除正在使用的文件
第三步,使用lsof查找刚才删除的文件是哪个程序使用的
第四步,进入/proc/PID/fd目录中,其中PID就是刚才查找到使用误删除文件进程的PID
第五步,就会发现其中的3号文件描述符就是指向刚才误删除的文件.利用重定向恢复
文件已经找回来了,只有某个文件正在被使用才能找回来,因为删除文件后,系统不会立即释放类删除的空间.