目的
掌握linux提供的工具来进行进程的查看与控制(top,ps,pstree),掌握这些工具能让我们在某些进程出现异常的时候及时查看相关的指标,从而解决问题。
学习目录
1.查看进程的运行状态
1.2top工具的使用
1.3ps工具的使用
1.4pstree工具的使用
2.进程管理
2.1kill命令的掌握与使用
2.2进程的执行顺序查看与修改
1.查看进程的运行状态
通过top
实时查看进程的状态,以及系统的一些信息。
通过ps
静态查看当前的进程信息。
通过 pstree
查看当前活跃进程的树形结构。
1.2top工具的使用
查看一些进程的状态及系统信息。
输入命令top
可以看到以下信息
top命令是一个前台程序是可以交互的:
q 退出程序
I 切换显示平均负载和启动时间的信息
P 更具cpu使用百分比大小进行排序
M 根据驻留内存大小进行排序
i 忽略闲置和僵死的进程,这是一个开关式的命令
k 终止一个进程,系统提示输入PID及发送的信号值,一般终止的信号值是15,强制终止的信号值是9
第一行:机器情况
top 表示当前程序的名称
11:24:08 表示当前的系统时间
up 34 days,7:10 表示该机器已启动多长时间
1 user 表示当前只有1个用户
load average: 0.24 0.14 0.10 分别对应1,5,15分钟内cpu的平均负载
#load average解释:对当前cpu工作量的度量,指运行队列的平均长度。
#load 的4种显示(假设当前是单cpu,单内核)
#1.load = 0 表示cpu没有任务
#2.load < 1 cpu任务不多,资源充足
#3.load = 1 cpu任务已满,所有资源被使用,但还在能力范围之内
#4.load > 1 cpu任务已满,所有资源被使用,还有大量进程在请求)
第一行补充:
查看cpu信息
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l #查看物理cpu个数
cat /proc/cpuinfo | grep "physical id" | grep "0" | wc -l #每个cpu的核心数
现实运维中会将load的临界值设定为0.7,load超过0.7就需要关注它,超过5就需要加班解决问题了。
一般会先看15分钟的大趋势,再对比5分钟看看是否有下降。
第二行:进程情况
Tasks:31 total 进程总数
1 running 1个正在运行的进程数
30 sleeping 30个睡眠的进程数
0 stopped 没有停止的进程数
0 zombie 没有僵尸进程(不会占用PID)
第三行:cpu使用情况
%Cpu(s): 3.8us 用户空间进程占用cpu百分比
0.8% sy 内核空间运行占用cpu百分比
0.0# ni 用户进程空间内改变过优先级的进程占用cpu百分比
95.3 id 空闲cpu百分比
0.0% wa 等待输入输出的cpu时间的百分比
0.0% hi 硬中断占用cpu的百分比
0.1 si 软中断占用cpu时间的百分比
0.0% st 虚拟cpu等待实际cpu的时间的百分比
第四行:内存情况
16425212 total 物理内存总量
7387528 free 空闲内存总量
1071400 used 使用的物理内存总量
7966284 buff/cache 用作内核缓存的内存量
第五行:交换区情况
969964 total 交换区总量
933952 free 空闲的交换区总量
1071400 used 使用的交换区总量
14746088 cache Mem 缓冲的交换区总量
第六行:进程概览
PID 进程id
USER 该进程的所属用户
PR 该进程执行的优先级priority值
NI 该进程的nice值
VIRT 该进程任务所使用的虚拟内存的总数
RES 该进程所使用的物理内存总数 也称为驻留内存总数
SHR 该进程共享内存的大小
S 该进程的状态 S=sleep R=running Z=zombie
%CPU 该进程cpu的利用率
%MEM 该进程内存的利用率
TIME+ 该进程活跃的总时间
COMMAND 该进程运行的名字
第六行补充
NICE值叫做静态优先级,是用户空间的一个优先级值。
其取值范围是-20——19,这个值越小,表示进程“优先级”越大,值越大,“优先级”越小。 0是默认的值
PR值表式Priority值,叫动态优先级。是进程在内核中实际的优先值。
进程优先值的取值范围是通过一个宏定义的,这个宏名称是MAX_PRIO,它的值为140。
取值范围是0——139,这个值越小优先级越高。这其中0——99是实时进程的值,100——139是给用户的值。
1.3ps工具的使用
ps是常用的查看进程的工具之一。
常用命令:ps -l
ps -afxo
ps aux
ps axjf
ps -l
:显示自己这次登录的bash相关进程信息罗列出来
ps -afxo
:自定义所需要的参数显示
例:ps -afxo user,ppid,pid,pgid,command
pgid
:进程组ID号
ps aux
:罗列出所有进程信息,可搭配grep命令和正则表达式使用ps aux | grep zsh
ps axjf
:查看时将连同部分的进程呈树状显示出来
内容含义:
F 进程的标志(process flags),当flags的值为1时,表示此子程序只是fork但没有执行exec,
为4时表示此程序使用root权限
USER 进程的拥有者
PID 进程的ID
PPID 其父进程的ID
SID session的ID
TPGID 前台进程组的ID
%CPU 进程占用的cpu百分比
%MEM 占用内存的百分比
NI 进程的NICE值
VSZ 进程使用虚拟内存大小
RSS 驻留内存中页的大小
TTY 终端ID
S or STAT 进程状态
WCHAN 正在等待的进程资源
START 启动进程的时间
TIME 进程消耗cpu的时间
COMMAND 命令的名称和参数
补充:
TPGID显示-1的都是守护进程。
STAT表示进程状态,而进程状态又分为:
R Running 运行中
S Interruptible Sleep 等待调用
D Uninterruptible Sleep 不可中断睡眠 无法使用kill命令杀掉D状态的进程,
一般是进程I/O的时候出现问题
T Stoped 暂停或跟踪状态
X Dead 即将被撤销
Z Zombie 僵尸进程,占用PID
W Paging 内存交换
N 优先级低的内存
< 优先级高的内存
s 进程的领导者
L 锁定状态
I 多线程状态
+ 前台状态
1.4pstree工具的使用
通过pstree
可以直观的看到相同的进程数量,可以看到进程间的相关性。
pstree
:
pstree -up
:
-p 同时列出每个process的PID
-u 同时列出每个process的所属账号
-A 各程序树之间以ASCII字元来链接
2.进程管理
掌握如何去管理进程。
2.1kill命令的掌握与使用
使用kill
命令结束进程。
kill [信号值] [进程PID]