1、进程相关概念
进程:正在运行中的程序
内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
Process:运行中的程序的一个副本,是被载入内存的一个指令集合
进程 ID(Process ID,PID)号码被用来标记各个进程
通常从执行进程的用户来继承,存在生命周期
task struct 任务结构表:Linux 内核存储进程信息的数据结构格式
task list 任务列表:多个任务的 task struct 组成的链表
进程创建:
都由其父进程创建,父好关系,CoW(写时复制,不发生改变时父子都指向同一文件;发生改变时,则复制)
init:第一个进程(centos6:init,centos7:systemd)
守护进程:随着计算机的开启、关闭而随之开启、关闭。
2、进程,线程和协程:
注:一个进程里至少有一个线程;线程之间由操作系统进行调度,包括进程中使用的资源也由操作系统进行调度;协程相当于线程中的语句块,由线程控制。
3、Page Frame:页框,用存储页面数据,存储 Page,每个进程要使用的分配空间
虚拟内存(线性内存):进程运行的时候以为自己拥有了全部的内存空间
物理地址空间和线性地址空间:
MMU:负责转换线性和物理地址(虚拟内存和物理内存)
TLB:翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
LRU:近期最少使用算法,释放内存
4、用户空间和内核空间:
5、进程之间基本状态和转换:
创建状态:进程在创建时需要申请一个空白 PCB(进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
就绪状态:进程已准备好,已分配到所需资源,只要分配到 CPU 就能够立即运行。
执行状态:进程处于就绪状态被调度后,进程进入执行状态。
阻塞状态:正在执行的进程由于某些事件(I/O 请求,申请缓存区失败)而暂时无法运行,进程受到阻塞,在满足请求时进入就绪状态等待系统调用。
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行。
状态之间转换六种情况:
运行 → 就绪:1,主要是进程占用 CPU 的时间过长,而系统分配给该进程占用 CPU 的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出 CPU,该进程便由执行状态转变为就绪状态。
就绪 → 运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配 CPU。
运行 → 阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态如发生了 I/O 请求。
阻塞 → 就绪:进程所等待的事件已经发生,就进入就绪队列。
以下两种状态是不可能发生的:
阻塞 → 运行:即使给阻塞进程分配 CPU,也无法执行,操作系统在进行调度时,不会从阻塞队列进行挑选,而是从就绪队列中选取。
就绪 → 阻塞:就绪态根本就没有执行,谈不上进入阻塞态。
6、IPC 进程间通信: 同一主机:
pipe 管道,一个写入管道文件,一个读(单向)
socket 套接字文件,进程间交换数据(双工工作方式)
signal 信号
shm shared memory,共享内存
semaphore 信号量,一种计数器,分配资源
不同主机:
socket ip 和端口号
RPC 远程过程调用
MQ 消息队列,如:Kafka , RabbitMQ,ActiveMQ
7、进程优先级
实时进程(realtime),基于 FIFO 先进先出或 RR 轮询
非实时进程:nice 按时间片分配进程
取 139 个队列,将相同优先级的放在一个队列中,运行一个时间片后从运行队列转至过期队列。轮回运行队列和过期队列互调,再运行。
进程优先级:系统优先级:数字越小,优先级越高0-139:各有 140 个运行队列和过期队列 实时优先级:99-0 值最大优先级最高
nice 值:-20 到 19,对应系统优先级 100-139
Big 0:时间复杂度,用时和规模的关系
0(1),O(logn),O(n)线性,O(n^2)抛物线,O(2^n)
8、进程状态:
Linux 内核:抢占式多任务,按时间片分配任务
进程类型:
守护进程:daemon,在系统引|导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程,用户执行命令等
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
9、进程工具
9.1 系统管理工具:
进程的分类:
CPU-Bound:CPU 密集型,非交互
编译安装、大量计算等
IO-Bound:IO 密集型,交互
拷贝大文件等 DMA:直接内存访问
Linux 系统状态的查看及管理工具:pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
Linux 系统各进程的相关信息均保存在 /proc/PID 目录下的各文件中
9.2 进程管理工具 PS 详解:-A ---()
f 选项显示进程树,相当于--|-- 属性对属性排序,属性前加-%cpu、%
ps axo pid,%cpu,%mem,tty k %cpu
-C cmdlist 指定命令,多个命令用,分隔,ps -C dd -L 显示线程
-e 显示所有进程,相当于-A
-f 显示完整格式程序信息
-F 显示更完整格式的进程信息
-H 以进程层级格式显示进程相关信息
-u userlist 指定有效的用户 ID 或名称
-U userlist 指定真正的用户 ID 或名称
-g gid 或 groupname 指定有效的 gid 或组名称
-G gid 或 groupname 指定真正的 gid 或组名称
-p pid 显示指 pid 的进程
--ppid pid 显示属于 pid 的子进程
-M 显示 SELinux 信息,相当于 Z
PS 输出属性:
VSZ:Virtual memory SiZe,虚拟内存集,线性内存
RSS:ReSident Size,常驻内存集
STAT:进程状态
R:running
S:interruptable sleeping,可中断的休眠
D:uninterruptable sleeping,不可中断的休眠
T:stopped,停止态
Z:zombie,僵尸态
+:前台进程
|:多线程进程
L:内存分页并带锁
N:低优先级进程
s:session leader,会话 (子进程)发起者
ps 优先级选项和常用组合:
ni:nice 值
pri:priority 优先级,和系统优先级相反
psr:processor CPU 编号,CPU(一级二级,三级[共享]缓存)
更换 CPU 缓存失效,解决:绑定进程和 CPU
taskset -p [进程 ID],查看,命令显示和 CPU 核数不一样[二进制]
tackset -cp 1 [进程 ID],绑定在 1 号 CPU 上 0,4 0-4 等
pidof dd,查看 dd 命令的进程编号
rtprio:实时优先级
# 示例:
ps axo pid,cmd,psr,ni,pri,rtprio
# 常用组合:
aux
-ef
-eFH
-eo pid,tid,class,rtprio,ni,pripsr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,commnice -n 10 ping 192.168.129.142 # 以指定优先级运行该命令renice # 更改优先级
PS示例:- -fg -fp -f –ppid -fp ,, -ft pts/ -p - -p -o comm= - -C httpd,sshd -o pid= -eo comm,etime,user | -eo pid,ppid,cmd,%mem,%cpu --=-%mem | -eo pid,ppid,cmd,%mem,%cpu --=-%cpu | - -- -eo euser,ruser,suser,-n
搜素进程:最灵活: 选项 |----t pts/ ---/sbin/ bash
9.3 top 详解%%+ 信息: |-d # 指定刷新时间间隔,默认为 ---H 线程模式,示例:top -H -p ` mysqld`
9.4 htop 详解---|
10、内存管理工具
10.1 free 命令详解内存空间使用状态:free [OPTION]
-b 以字节为单位
-m 以 MB 为单位
-g 以 GB 为单位
-h 易读格式
-0 不显示-/+ buffers/cache 行
-t 显示 RAM + swap 的总和
-s n 刷新间隔为 n 秒
-c n 刷新 n 次后即退出cat /proc/sys/vm/drop_caches # 缓存为 0,重定向一个 3 进去清理缓存
10.2 内存工具 vmstat///-:Time spent idle. Linux . 前,包括 IO- IO.. 前 ,包括 .-s:显示内存的统计数据
11、iostat 统计CPU和设备IO信息例:iostat 1 10
12、iftop 显示带宽使用情况,epel源例:iftop -n -i eth1
13、pmap 命令:进程对应的内存映射pmap [options] pid [..]
-X:显示详细格式的信息例:pmap1
14、系统监控工具
glances 命令: EPEL 源-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [---t refresh] [-f ] [---d:关闭磁盘 I/-f /path/to/-o {HTML|-m:禁用 ---/-s --
dstat 命令详解:系统资源统计
dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。# dsta --c, ----d, ---------------------top- --top---top---top-latency:延迟最大的进程;
示例1:内存资源使用情况
# dstat -glms --top-mem
示例2:CPU资源使用情况
# dstat -cyl --proc-count --top-cpu
iotop 命令详解:iotop 命令是一个用来监视磁盘 I/O 使用状况的 top 类工具 iotop 具有与 top 相似的 UI,其中包括 PID、用户、I//-o,--only 只显示正在产生I/-b,---n NUM,--iter=-d SEC,--delay=SEC 设置每次监测的间隔,默认1秒,接受非整形数据例如1. -p PID,--pid=PID 指定监测的进程/-u USER,--user=USER 指定监测某个用户产生的I/-P,---a,--accumulated 显示累积的I/-k,--kilobytes 使用kb单位,而不是对人友好的单位。在非交互模式下,脚本编程有用
iotop 常用参数和快捷键:
-t,--time 加上时间戳,非交互非模式
-q, --quiet 禁止头几行,非交互模式,有三种指定方式
-q 只在第一 次监测时显示列名
-qq 永远不显示列名
-qqq 永远不显示I/0汇总
交互按键:
left 和 right 方向键:改变排序
r:反向排序
0:切换至选项--only
p:切换至--processes选项
a:切换至--accumulated选项
q:退出
i:改变线程的优先级
nload 查看网络实时吞吐量:
nload 是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况安装: -y + 毫秒,可通过--t /s、一种是显示 Byte/s,默认是以 Bit/s,也可不显示/-u h|b|k|m|g|H|B|K|M|G 表示的含义:h:auto,b:Bit/s,k:kBit/s,m:MBit/s,H:auto,B:Byte/s,K:kByte/s,M:MByte/-u M eth0
lsof:list open files 查看当前系统文件的工具--c--d+d+D:递归列出目录下被打开的文件
lsof示例:
进程管理:
查看由登陆用户启动而非系统启动的进程
lsof /dev/pts/1
指定进程号,可以查看该进程打开的文件
Isof -p 9527
文件管理:
查看指定程序打开的文件
Isof -c httpd
查看指定用户打开的文件
Isof -u root | more
查看指定目录下被打开的文件
lsof +D /var/log/
lsof +d /var/log/
参数 +D 为递归列出目录下被打开的文件,参数+d为列出目录下被打开的文件
恢复删除文件:
lsof | grep delete # 查看打开文件(被误删除),看到进程编号,如:11863
ll /proc/11863/fd # 查看文件描述符,如 4(已被删除)
cat /proc/11863/fd/4 > /data/m.txt # 重定向找回文件
查看所有网络连接:
lsof -i -n
lsof -i@127.0.0.1
通过参数 -i 查看网络连接的情况,包括连接的ip、端口等以及一些服务的连接情况,例如:sshd等。也可以通过指定 ip 查看该 ip 的网络连接情况。
查看端口连接情况:
lsof -i :80 -n
通过参数 -i:端口 可以查看端口的占用情况,-i参数还有查看协议,ip的连接情况等
查看指定进程打开的网络连接:
lsof -i -n -a -p 9527
参数-i、-a、-p等,-i查看网络连接情况,-a查看存在的进程,-p指定进程
查看指定状态的网络连接:
lsof -n -P -i TCP -s TCP:ESTABLISHED
-n:no host names,-P:no port names,-i TCP指定协议,-s指定协议状态通过多个参数可以清晰的查看网络连接情况、协议连接情况等
15、进程管理工具
kill 命令:向进程发送控制信号,以实现对进程管理每个信号对应一个数字,信号名称以 SIG 开头(可省略),不区分大小写显示当前系统可用信号:-I 或者 trap - ) SIGINT 中止正在运行的进程,相当于 Ctrl+) SIGQUIT 相当于 ctrl+)信号的数字标识:,, aux 查到该进程 ID, - - ` bc` 按 PID: [- - - [-SIGNAL] comm... 按模式:pkill [options] pattern -------P pid:显示指定进程的子进程
16、作业管理
Linux 的作业控制:
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
让作业运行于后台:
(1)运行中的作业:Ctrl+z,停止状态
(2)尚未启动的作业:COMMAND &
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系:nohup COMMAND &> /dev/null &screen ; COMMAND
查看当前终端所有作业: jobs
作业控制:fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_ NUM]:让送往后台的作业在后台继续运行kill [%JOB_ NUM]:终止指定的作业killall -19 ping # 19 信号将后台变为后台休眠状态killall -18 ping # 18 信号将后台休眠变为后台执行
并行运行:同时运行多个进程,提高效率方法 all.&&&
&);(f2.&);(f3.&& f2.& f3.& & & & }