Linux进程管理
目 录
3.2.2 ps aux –sort %cpu | less 1
3.2.3 ps axo user,pid,ppid, %mem,command | grep httpd 1
3.3.2 ab -c 100 -n 100 http://www.baidu.com.html 1
什么是进程
概述
进程是已启动的可执行程序的运行实利,进程有一下组成部分:
- 分配内存,已分配内存的地址空间
- 安全属性,进程的运行身份和权限
- 进程代码,运行一个或多个线程
- 进程状态,进程运行后的多种状态
- 静态程序,二进制文件,静态/usr/bin/ls,/usr/sbin/sshd
- 动态进程,进程运行的过程,有生命周期及运行状态
进程的运行环境
1、局部和全局变量
2、当前的调度上下文
3、分配给进程使用的系统资源,例如文件描述符,网络端口等
4、给进程分配相应的PID,UID
进程的生命周期
程序运行时进程的状态关系
- 父进程复制自己的地址空间创建新的子进程,子进程可以继承父进程(PPID)的环境变量
- 每个进程都有自己唯一的ID(PID )
- 进程是由systemd这个父进程派生出来的子进程
- 子进程在运行自己的程序代码的时候,父进程往往会进入休眠状态。
- 子进程完成程序代码发出退出信号请求。
- 子进程已经关闭或释放了其资源环境,剩余的部分称之为僵停(僵尸Zombie)
- 父进程在子进程退出时收到信号会被唤醒,清理剩余结构,然后继续执行其自己的程序代码
监控和管理进程
概述
1、在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程
2、在进程运行时,他对CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境而改变。
静态监控进程
为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的
ps aux命令
ps命令:静态查看进程的命令
ps aux:一般使用此命令详细查看进程信息
[root@oldboy ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.8 125352 3884 ? Ss 04:17 0:09 /usr/lib/systemd/systemd --switched-root
root 2 0.0 0.0 0 0 ? S 04:17 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 04:17 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 04:17 0:00 [kworker/0:0H]
删去部分
- USER:运行进程的用户
- PID:进程的ID
- %CPU:CPU的占用率
- %MEM:内存占用率
- VSZ:占用虚拟内存
- RSS:占用实际内存,驻留内存
- TTY:进程运行终端
- STAT:进程状态
R:进程运行
S:可中断睡眠
D:不可中断睡眠
Z:僵尸进程
X:进程已经退出
T:进程被暂停
Ss s:进程的领导者,父进程
S< < :优先级较高的进程
SN N:优先级较低的进程
R+ + :表示是前台的进程组
Sl:以线程方式运行
- START:进程的启动时间
- TIME:进程占用CPU的总时间
- COMMAND:进程文件、进程名
ps aux –sort %cpu | less
--sort:排序
%cpu:按CPU排序
less:分页浏览
对进程的CPU进行排序展示
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.8 125352 3884 ? Ss 04:17 0:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 04:17 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 04:17 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 04:17 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 04:17 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 04:17 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 04:17 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 04:17 0:02 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 04:17 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 04:17 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S 04:17 0:00 [kdevtmpfs]
root 14 0.0 0.0 0 0 ? S< 04:17 0:00 [netns]
例如按进程占用内存大小展示ps aux –sort %mem | less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 04:17 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 04:17 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 04:17 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 04:17 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 04:17 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 04:17 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 04:17 0:02 [rcu_sched]
ps axo user,pid,ppid, %mem,command | grep httpd
自定义显示字段
[root@oldboy ~]# ps axo user,pid,ppid,%mem,command | grep httpd
root 20176 1 1.0 /usr/sbin/httpd -DFOREGROUND
apache 20177 20176 0.6 /usr/sbin/httpd -DFOREGROUND
apache 20178 20176 0.6 /usr/sbin/httpd -DFOREGROUND
apache 20179 20176 0.6 /usr/sbin/httpd -DFOREGROUND
apache 20180 20176 0.6 /usr/sbin/httpd -DFOREGROUND
apache 20181 20176 0.6 /usr/sbin/httpd -DFOREGROUND
root 29804 28286 0.2 grep --color=auto httpd
ps auxf | httpd
f:表示显示父、子进程之间的关系
[root@oldboy ~]# ps auxf | grep httpd
root 30047 0.0 0.1 112704 664 pts/0 R+ 16:06 0:00 \_ grep --color=auto httpd
root 20176 0.0 1.0 230376 5164 ? Ss 12:45 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20177 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 20178 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 20179 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 20180 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND
apache 20181 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND
用pstree -p | grep httpd 也可以实现
[root@oldboy ~]# pstree -p | grep httpd
|-httpd(20176)-+-httpd(20177)
| |-httpd(20178)
| |-httpd(20179)
| |-httpd(20180)
| `-httpd(20181)
/run/sshd.pid
这个文件理存放着程序运行时及进程的PID
[root@oldboy ~]# cat /run/sshd.pid
983
动态监控进程
top命令
top命令可以动态的查看主机运行时间、登录用户数、CPU负载,内存使用、进程等信息
top - 16:18:18 up 12:00, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 481876 total, 75084 free, 95348 used, 311444 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 337268 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
501 root 20 0 298928 6288 4940 S 0.3 1.3 0:56.35 vmtoolsd
1 root 20 0 125352 3884 2604 S 0.0 0.8 0:10.09 systemd
第一行:时间及系统负载
top;表示系统当前时间 up:表示系统运行时长
load average:0.25 0.00 0.00 :分别表示系统5、10、15分钟系统的平均负载
第二行:进程数
total:表示当前系统总进程数 running:正在运行的进程数 sleeping:睡眠中的进程数
stoped:已经结束的进程数 zombie:僵尸进程数
第三行:CPU使用率
us:用户空间占用的CPU百分比 sy:内核空间占用的CPU百分比
ni:用户空间内改变过优先级的进程占用的CPU百分比
id:空闲的CPU百分比 (等于1减去别的进程占用率) wa:等待输入输出的CPU时间百 比
第四行:内存信息(kb)
Mem:物理内存总量 free:空闲内存总量 buffers:用作内核缓存的内存量
第五行:交换分区信息(swap)
top [选项]
h:查看帮助
z:以彩色信息展示
l:显示所用CPU的负载
s:设置刷新时间
b:高亮显示处于R状态的进程
M:安内存使用百分比排序输出
P:按CPU使用百分比排序输出
R:堆排序进行反转
f:自定义显示字段
k:kill掉指定PID进程
W:保存top环境设置 ~/.toprc
q:退出top
top:查看实时动态系统运行情况
-b:批处理模式操作
-d:屏幕刷新间隔时间
-p:指定进程
-n:循环显示的次数
top交互命令
h:显示帮助画面,给出一些简短的命令总结说明
k:终止一个进程
q:退出程序
r:重新安排一个进程的优先级别
s:改变两次刷新之间的延迟时间(单位为s),输入0值为不断刷新,默认是5s
m:切换显示内存信息
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中
案例:web压力测试
ab -c 100 -n 100 http://www.baidu.com.html
c 100:表示并发数为100个用户
-n 100:表示请求总数为100
http://www.baidu.comindex.html表示请求的目标URL
请求100次,100个并发
dev/zero
无穷大的文件
其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个 特定大小的空白文件。
/dev/null
文件黑洞
在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢 弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一 个EOF。
系统负载的计算和意义
进程以及子进程和线程产生的计算指令都会让cpu执行。产生请求的这些进程组成"运行队列",等待CPU执行,这个队列就是系统负载,系统负载是所用CPU的运行队列的总和
[root@oldboy ~]# w
16:32:11 up 12:14, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 15:31 3.00s 0.11s 0.08s w
假如当前计算机有4个cpu,当前的负载时2.92
cpu1 cpu2 cpu3 cpu4
2.92/4(4个核心)=73%的CPU资源被使用,剩下%27的CPU计算源是空闲的
假设当前的计算机有两个CPU,当前的负载时2.92
2.92/2=146% 已经验证超过了CPU的处理能力