Linux 进程管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 进程管理相关的知识,希望对你有一定的参考价值。
进程是程序运行的一个副本,存在生命周期,cpu按照时间分配每个进程运行,还未结束的进程将保存在内存存储的固定格式中(task struct),多个任务的task struct组成的链表称task list。我们用指令查看的结果其实就是保存在task list中的数据,进程间的数据通过cow写时复制实现数据独立。
- 进程优先级
- 实时优先级:0-99,数字越大,优先级越高;实时优不可调,优先级最高。
- 静态优先级: 100-139,数字越小,优先级越高;非内核程序一般都属于这类,默认120,可以用nice值来调整,nice值范围在 -20-19,为了方便显示,priority默认显示 20,范围在0-39之间,实际是100-139。
进程内存分配,一个4G内存机器,内核会把物理内存用Page Frame形式分配给每个进程,最大3G,所以,每个进程都一位自己是除了内核唯一的进程,进程中的数据分为两大类。
- VSZ:虚拟内存集合,包含大量的库引用
- RSS:常驻内存,一些重要的指令集
进程状态 :
- 运行态:running
- 就绪态:ready
- 睡眠态:
- 可中断:interruptable 无须额外数据准备
- 不可中断:uninterruptable 比如io过程中 还未加载完成
- 停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped
- 僵死态:zombie
ps
ps有3种显示风格
UNIX风格,选项带一个 -
BSD风格 选项不带 -
GNU 带两个-的长选项
BSD风格:
常用选项
a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
[[email protected] ~]# ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193700 6848 ? Ss 12:28 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
USER
PID
%CPU cputime/realtime cpu使用时间 除 进程累计运行时间
%MEM 占整个内存比率
VSZ 虚拟内存集 虚拟内存集中可能包含很多共享库 单位是kb
RSS 常驻内存集 (resident set size, the non-swapped physical memory that a task has used (in kiloBytes).(alias rssize, rsz).)单位是kb
STAT
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:Stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader
TIME 累计cpu使用时间
UNIX风格
常用选项
-e:显示所有进程
-f:显示完整格式的进程信息
-F:显示完整格式的进程信息;
C: cpu utilization cputime/realtime cpu使用时间 除 进程累计运行时间
PSR:运行于哪颗CPU之上
-H:以层级结构显示进程的相关信息;
[[email protected] ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:28 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 12:28 ? 00:00:00 [kthreadd]
UID
PID
PPID 父pid
C cputime/realtime cpu使用时间 除 进程累计运行时间
STIME 启动时间
TTY 相关终端
TIME cpu累计时间
CMD
自定义选项,o field1, field2,...,个人觉得非常好用
常用自定义字段
uid
uname
group
fuid filesystem access user ID
fuser
gid
%cpu pcpu
%mem pmem
psr processor that process is currently assigned to 运行于哪颗CPU之上
pid
ppid
tty
rtprio realtime priority 实时优先级 越大优先级越高
priority 用户优先级 (pri不一样算法)
ni nice nice value. This ranges from 19 (nicest) to -20 (not nice to others)
vsz vsize 虚拟内存
rss rssize rsz 常驻内存
s stat 状态
start 命令开始时间
args cmd command
[[email protected] ~]# ps axo uname,pid,ppid,tty,pcpu,pmem,rtprio,priority,ni,vsz,rsz,s,start,cmd,pri
USER PID PPID TT %CPU %MEM RTPRIO PRI NI VSZ RSZ S STARTED CMD PRI
root 1 0 ? 0.0 0.3 - 20 0 193700 6848 S 12:57:49 /usr/lib/systemd/systemd -- 19
top
top - display Linux processes
top - 01:51:36 up 13:22, 3 users, load average: 0.00,0.01,0.05
当前时间 运行时常 3个用户 平均负载 过去1分钟、5分钟和15分钟的平均负载;cpu*(0-0.7表示顺畅 1满负载 5将近死机)
Tasks: 112 total, 2 running, 110 sleeping, 0 stopped, 0 zombie
总共多少进程 2个在跑 110在睡眠 0个停止 0个僵死
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
用户空间占用百分比 内核占用 用户进程改变过优先级的进程占用 空闲idle 等待(io) 硬件中断hardware interrupt 软件中断 被偷走steal
KiB Mem : 1867048 total, 1383244 free, 166956 used, 316848 buff/cache
内存 总空间 空闲空间 使用 可回收buffer待写入 cache读取缓存
KiB Swap: 2097148 total, 2097148 free, 0 used. 1501796 avail Mem
交换分区
PID USER PR优先级 NI VIRT虚拟内存集 RES常驻内存 SHR共享内存 S %CPU %MEM TIME+(cpu累计占用时间) COMMAND
607 root 20 0 305100 6168 4800 S 0.3 0.3 0:48.91 vmtoolsd
交互
M 根据内存排序
T cpu累计占用时间 time排序
P:以占据CPU百分比排序;
首部信息:
uptime信息:l命令
tasks及cpu信息:t命令
1 分别显示每个cpu
内存信息:m命令
修改刷新时间间隔:s
终止指定的进程:k
退出命令:q
htop 使用
说完top,在介绍一款升级版top htop,相比top,htop提供更多的鼠标方便操作,更直观的可视化。
[[email protected] yum.repos.d]# yum install htop
帮助说明
/ search
p 详细/简洁 程序路径
t 树状显示 可查看进程关系
u 根据user筛选
K 显示/隐藏 内核线程 而在top是显示的
H 显示/隐藏 用户线程
F 光标跟踪程序
P 根据cpu排序 M 根据内存排序 T根据cpu占时间排序
I 逆序
自定义字段排序
space 下一个经常
K 结束进程
a 绑定进程在哪个cpu
l 显示进程打开的文件
s 查看当前进程发起的系统调用
i 涉及优先级
] 增加优先级
[ 减少优先级选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
dstat
versatile tool for generating system resource statistics,非常强大系统监测工具
安装
[[email protected] ~]# yum install dstat
常用选项?
-c, --cpu cpu信息
-C 0,3,total 哪块cpu
-d, --disk 磁盘读写
-D total,sda 显示磁盘的相关信息
-g, --page 显示page相关的速率数据;
-i, --int 终端
-l, --load enable load average stats (1 min, 5 mins, 15mins)
-m, --mem Memory的相关统计数据
-n, --net 网络的相关统计数据;
-N eth1,total
-p, --proc 进程状态
-r: --io 显示io请求的相关的统计数据;
-s --swap: 显示swapped的相关统计数据;
-t, --time 当前时间
-y, --sys cpu中断 切换
--aio 异步io
--fs, --filesystem 文件数量和inodes
--ipc 队列信号量共享内存
--raw 全部socket
--socket tcp udp等
--tcp --udp
--output file
--top-cpu 最高cpu使用
--top-cputime
--top-io: 最占用io的进程;
--top-mem: 最占用内存的进程;
--top-latency: 延迟最大的进程;
dstat delay count
[[email protected] ~]# dstat 1 2
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int中断 csw-上下文切换
0 0 100 0 0 0|3413B 4582B| 0 0 | 0 0 | 87 64
0 0 100 0 0 0| 0 0 | 120B 818B| 0 0 | 71 53
0 0 100 0 0 0| 0 0 | 60B 338B| 0 0 | 48 41
查看cpu
[[email protected] ~]# dstat -c 1 1
----total-cpu-usage----
usr用户占用比率 sys内核 idl空闲 wai等待 hiq硬件中断 siq软件中断
0 0 100 0 0 0
0 0 100 0 0 0
查看内存
[[email protected] ~]# dstat -m 1 1
------memory-usage-----
used buff cach free
294M 2080k 472M 1055M
294M 2080k 472M 1055M
磁盘读写
[[email protected] ~]# dstat -d 1 1
-dsk/total-
read writ
3406B 4573B
0 0
平均负载 过去1,5,15分钟负载 ,0-0.8顺畅,1是满负载 超过5是快不行了
[[email protected] ~]# dstat -l 1 1
---load-avg---
1m 5m 15m
0 0.01 0.05
0 0.01 0.05
网络io速度
[[email protected] ~]# dstat -n 1 1
-net/total-
recv接收 send发送
0 0
60B 194B
进程状态
[[email protected] ~]# dstat -p 1 1
---procs---
run(运行) blk(阻塞 不可中断) new(新)
0.0 0 0.2
0 0 0
socket状态
[[email protected] ~]# dstat --socket 1 1
------sockets------
tot tcp udp raw frg
574 4 3 0 0
574 4 3 0 0
tcp状态
[[email protected] ~]# dstat --tcp 1 1
----tcp-sockets----
lis监听 act确认 syn同步 tim等待 clo关闭
4 2 0 0 0
4 2 0 0 0
最高使用cpu
[[email protected] ~]# dstat --top-cpu 1 1
-most-expensive-
cpu process
vmtoolsd 0.0
最多使用cpu时间
[[email protected] ~]# dstat --top-cputime 1 1
--highest-total--
cputime process
vmtoolsd 1055
vmtoolsd 635
最多io
[[email protected] ~]# dstat --top-io 1 1
----most-expensive----
i/o process
bash 34k 3198B
sshd: [email protected] 146B 180B
最多内存
[[email protected] ~]# dstat --top-mem 1 1
--most-expensive-
memory process
firewalld 27.0M
firewalld 27.0M
最高延迟
[[email protected] ~]# dstat --top-latency 1 1
--highest-total--
latency process
vmtoolsd 85
kworker/1:1 60
进程调优
非内核进程默认priority=120,为了方便读取很多场景使用20
nice值范围在-20-19
调优后 0<=priority<=39
增加优先级
[[email protected] yum.repos.d]# nice -n -5 htop
[[email protected] 14511]# cat /proc/13828/sched
htop (13828, #threads: 1)
-------------------------------------------------------------------
......
prio : 115
.......
降低优先级
[[email protected] yum.repos.d]# nice -n 5 htop
[[email protected] ~]# ps axo uname,pid,ppid,tty,pcpu,pmem,rtprio,priority,ni,vsz,rsz,s,start,cmd|grep htop
root 13851 2368 pts/1 0.2 0.1 - 25 5 122432 2116 S 08:42:53 htop
运行中的程序可以用renice进行调优
#renice [-n] NICE PID...
[[email protected] ~]# renice -n -3 13851
13851 (进程 ID) 旧优先级为 5,新优先级为 -3
以上是关于Linux 进程管理的主要内容,如果未能解决你的问题,请参考以下文章