Linux下的进程调度与作业管理
一、概述
1.1 进程的相关概念:
通过前面的几个章节,我们几乎已经学习了很多的linux的基础,这个章节我们讲一下linux下的进程管理,就像windows 下的进程一样,我们知道windows 下有一个任务管理器,专门用来管理进程,我们首先看一下windows 的任务管理器:
从这2个图我们可以看出,windows 下的进程管理是不需要我们用户进行过多的调度的,我们有时候也会遇到比如说某一个进程占用CPU过多,我们的主机或者说操作系统就会变得非常卡,有时会出现”假死”的现象,在windows XP之前的版本,甚至包括XP都会出现真死的情况,就是鼠标卡住一动不动,也就是我们说的死机,造成这种原因一般就是CPU运行的负载过大,或者说某一个进程占用CPU时间太长,占用的CPU太多,造成的进程堵塞的情况,想必有维修经验的同学都会遇到这样的情况,由于windows大多是单任务 单用户的系统,所以出现死机的情况我们只能“重启”解决。但是如果是生产中的服务器,我们也reboot解决吗。你要知道生产中的服务器是不允许没有任何通知的情况下进行操作系统重启操作的,我们又知道,linux内核是支持多任务、多用户同时访问的,所以我们可以在这个用户死机的时候,用ALT+F1~F7 切换到其他的终端,在其他的终端上使用root权限把占用过的CPU的进程kill掉,这样就能解决死机的问题了,这就是我们需要了解和掌握的linux 内存调度。
所谓进程,我们可以简单理解,把进程想象成动态的程序,由于计算机只能识别二进制文件,所以我们在硬盘上存储了许许多多的二进制可执行文件(程序),当我们在命令行模式下输入某个命令时,前面讲过其实我们是触发了一个事件,也就是启动了一个进程而已,只不过内核需要首先判断一下进程的发起者,其实我们登录的shell本身就是一个进程,我们一般要运行的这个图标:
它本身就是一个程序,在我们登录系统的时候也是触发了一个事件,当我们输入账号和密码的时候,其实就是给了这个进程一个权限,也就是UID 和GID 权限,因为/bin/bash本身也是一个程序而已,所以我们日常登录的shell本身就是一个进程,我们在这个shell上运行命令,当然就是从这个进程中触发一个事件,衍生出一个新的进程来加载到内存中,等待CPU执行而已,所以说这个衍生出来的进程就叫做子进程,创造这个子进程的进程就是父进程,子进程会继承父进程的相关运行权限,包括父进程的环境变量就是这个意思。所以说,每一个进程都有一个PID ,而衍生出来的子进程也会有一个PID,也会有一个PPID 这个PPID就是他的父进程的PID号。
说了这么多,大概大家也应该会明白相关的原理,请看下面这2个图:
二、工作管理
2.1 什么是工作管理
工作管理(job control) 是用在bash环境下的,也就是说,当我们登录系统取得bash shell之后,在单一终端下同时运行多个工作的行为管理,举例来说,我们在登录bash后,想要一边复制文件一边进行数据查找,一边进行编译,还可以一边进行VIM程序编写,当然我们可以重复登陆那6个命令行界面的终端环境中,不过,能不能在一个bash 中实现,当然可以,就要用到job control 。
2.2 job control 的管理
1. 直接将命令丢到后台中执行的 &
把某些工作直接丢到后台环境中,让我们可以继续操作前台的工作,例如:
2. 将目前的工作丢到后台中“暂停” : ctrl + z
比如我们正在编辑/etc/passwd 这个文件,我们发现想要查询一个当前shell的一个其他文件的信息,那么可以使用ctrl+z 这个命令暂时将我们当前的任务挂起
+表示最近一个被丢进后台的工作
3. 查看目前的后台的工作状态: jobs
jobs [-lrs]
选项:
-l 除了列出job number 与命令字串之外 同时列出PID的号码
-r 仅列出在后台run运行的工作
-s 仅列出正在后台当中暂停(stop)的工作
4. 将后台工作拿到前台来处理 fg %number
例如:我们可以把刚才的vim 编辑的文件 返回到前台接着进行编辑
[root@localhost test]# fg %3
vim passwd
5. 让工作在后台下的状态变成运行中 bg
例如:执行find / ! -perm /111 > /tmp/text.text 后立即丢到后台去暂停
然后我们运行bg %1 在运行jobs 来查看一下状态
我们会发现现在1 这个作业的状态是在后台运行的running 态
6. 管理后台当中的工作:kill
kill -signal %jobnumber
选项:
-l 这个是L的小写,列出目前kill 能够使用的信号(singnal) 有哪些
signal 代表给予后面接的那个工作什么样的指示
这里详细说明以下几个数字的涵义:
-1 重新读取一次参数的配置文件(类似于reload)
-2 代表与有键盘输入 ctrl -c 同样的操作
-9 立刻强制删除一个工作
-15 以正常的程序方式终止一项工作,与-9 不一样的
例如,我们把这个工作强制终止:
如果我们想让工作3这个任务正常退出,则使用-15 例如:
2.3 进程管理
2.3.1 进程的查看
1. ps命令
选项:
-A 所有进程均显示出来,与-e 具有同样的作用
-a 不与终端 terminal 有关的所有进程
-u 有效用户(effective user)相关的进程
X 通常与a 这个参数一起使用,可列出比较完整的信息
a: 所有与终端相关的进程
x: 所有与终端无关的进程
带[] 的是内核线程
u: 以用户为中心来组织状态信息显示
(1)仅查看自己的bash 相关进程ps -l
下面分别讲解一下每一列的意义:
F : 代表这个进程的标志 (process flags) 说明这个进程的权限 常见的号码有
**4** 表示此进程的权限为 root
**1** 表示此子进程金科进行复制(fork) 而无法实际执行(exec)
S 代表这个进程的状态(STAT) 主要的状态有:
**R** (Running)该进程正在运行中
**S** (Sleep)该进程目前正在睡眠状态idle 但可以被唤醒
**D** 不可被唤醒的睡眠状态 通常这个进程可能在等待I/O 的情况
**T** 停止状态(STOP) 可能是在工作控制(后台暂停)或出错(traced)状态
**Z** (Zombie)“僵尸”状态,进程已经终止,但却无法被删除至内存外
UID/PID/PPID 代表此进程被改UID 所拥有 / 进程的PID号码 / 此进程的PPID号码
C 代表CPU使用率 单位为百分比
PRI/NI Priority/Nice 缩写,代表此进程被CPU所执行的优先级,数值越小,代表该进程越快被CPU执行
ADDR/SZ/WCHAN 都与内存有关, ADDR 是 kernel function 指出该进程在内存的哪个部分,如果似乎个running 的进程,一般就会显示为“-”,SZ 代表此进程用掉多少内存
WCHAN 表示目前进程是否运行中,“-” 表示正在运行中
TTY 登录者的终端机的位置,若为远程登陆则使用动态终端接口(pts/n)
TIME 使用掉的CPU时间,注意,是此进程花费的CPU运行的时间,不是系统时间
CMD 就是command 的缩写,造成此程序的触发进程的命令为何
2. 查看系统所有的进程 ps aux
解释一下各个字段的涵义
USER 改进程属于哪个用户账号
PID 该进程的进程标识符
%CPU 该进程使用掉的CPU资源百分比
%MEM 该进程所占用的物理内存百分比
VSZ 该进程使用掉的虚拟内存量(KB)
RSS 该进程占用的固定的物理内存两(KB)
TTY 该进程是在那个终端机上面运行,若与终端机关无关则显示 ? 另外 tty1~tty6是本机上面登录者程序,若为pts/0等 则表示为由网络连接进主机的进程
STAT 该进程目前的状态,
R running 运行态
S Interuptable sleeping 可中断睡眠
D uninteruptable sleeping 不可中断睡眠
T Stopped 停止态
Z zombie 僵尸态
+ 前台进程
l 多线程进程
N 低优先级进程
< 高优先级进程
s session leader 会话主导者
3. 其他ps 命令
(1)ps -lA 显示出所有的进程
(2)ps axjf 显示出进程之间的关系
(3)ps axo 自定义显示列表 如只显示 user,pid,command,psr,pri,ni 等信息
4. pgrep 命令
pgrep [OPTIONS] “PATTERN”
-U UID 仅显示以指定用户身份运行的进程
-G GID 仅显示以指定用户组的身份运行的进程
-I显示PID 和进程名
5. 显示指定命令所启动的进程ID pidof
语法格式 pidof PROGRAM (给定的命令行程序)
6.top 命令 动态查看进程的变化
相对于ps是选取一个时间点的进程状态,top 则可以持续检测进程运行的状态
top [-d数字] | top [-bnp]
选项:
-d 后面可以接秒数,就是整个进程界面更新的秒数,默认是5S
-b 以批次方式执行top 还有更多的参数可以使用。
通常会搭配重定向来讲批处理的结果输出成为文件
-n 与 -b 搭配,意义是:需要进行几次top 的输出结果
-p 指定某些个PID 来进行查看监测而已
在top 执行过程中可以使用按键命令
? 显示在top 正当中可以输入按键命令
P 以CPU 的使用资源排序显示
M 以内存的使用资源排序显示
N 以PID 来排序
T 由该进程使用的CPU时间累计(TIME+)排序
k 给予某个PID 一个信号(signal)
r 给予某个PID重新定义一个nice值
q 离开top软件的按键
上图就是运行top 命令后显示出的内容,现在分别讲述一下top 头几行信息的意义:
第一行top
目前的时间 17:39:31
开机到目前为止经过的时间 即 up 3:16
已经登录系统的用户人数 2 users 这个选项
后面的load average:0.00 0.01 0.05 分别是系统在1分钟 5分钟 15分钟平均要负责运行几个进程的意思,越小代表系统越闲置,若高于1就得注意系统压力是否过大了
第二行
Tasks... 显示的是目前进程的总量与个别进程在什么状态(running,sleeping,stopped,zombie)比较注意的是最后的zombie 那个数值,如果不是0 要查询是哪个编程了僵尸态
第三行
CPUs... 显示的是CPU的整体负载,每隔选项可使用?查阅 需要特别注意的是 %wa 那个选项代表的是 I/Owait 同城系统变慢的原因就是这个值比较大
第四行与第五行
表示目前的物理内存与虚拟内存的使用情况,要注意的是swap 的使用量尽量少,如果swap被大量使用,表示系统的物理内存不足
第六行 就是top的首部
这里的列表的意义与PS 中的基本类似,这里就不加以详细说明了
7. htop命令的用法
htop 是 top 的升级版,系统里面并没有安装,需要我们手动去安装一下htop
上图是运行htop 的结果,htop 需要手动配置epel yum源才能安装运行后才能使用
显然,htop 工具的功能更强大
htop命令:
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
8. vmstat 检测系统资源变化的命令
-
Report virtual memory statistics
vmstat [options] [delay [count]]
procs:
r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
memory:
swpd:交换内存使用总量;
free:空闲的物理内存总量;
buffer:用于buffer的内存总量;
cache:用于cache的内存总量;
swap
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap的速率(kb/s)
io
bi:从块设备读入数据到系统的速度(kb/s)
bo:保存数据至块设备的速率(kb/s)
system
in:interrupts,中断速率;
cs:context switch, 上下文 切换的速率;
cpu
us: user space
sy:system
id:idle
wa:wait
st: stolen
选项:
-s:显示内存统计数据;
9. pmap命令:
– report memory map of a process
pmap [options] pid [...]
-x:显示详细格式的信息;
另一种查看方式:cat /proc/PID/maps
10. glance工具
-
A cross-platform curses-based monitoring tool
内建命令:
常用选项:
-b:以Byte为单位显示网上数据速率;
-d:关闭磁盘I/O模块;
-m:关闭mount模块;
-n:关闭network模块;
-t #:刷新时间间隔;
-1:每个cpu的相关数据单独显示;
-o {HTML|CSV}:输出格式;
-f /PATH/TO/SOMEDIR:设定输出文件的位置;
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR:本机的某地址,用于监听;
客户端模式:
glances -c IPADDR
IPADDR:是远程服务器的地址;11. dstat 命令
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息;
-C #,#,...,total
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
--tcp
--udp
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程;
--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-lantency:延迟最大的进程;
原创文章,作者:luobo3692003,如若转载,请注明出处:http://www.178linux.com/49888