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.& &  &  & }

Linux 进程资源分配,linux 进程管理和内存分配相关推荐

  1. Linux内存管理:内存分配:slab分配器

    <linux内核之slob.slab.slub> <Linux内核:kmalloc()和SLOB.SLAB.SLUB内存分配器> <Linux内存管理:内存分配:slab ...

  2. 【Linux 内核 内存管理】内存管理架构 ④ ( 内存分配系统调用过程 | 用户层 malloc free | 系统调用层 brk mmap | 内核层 kmalloc | 内存管理流程 )

    文章目录 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) 二.内存管理流程 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) " 堆内存 " ...

  3. linux内存管理策略,Glibc内存管理—ptmalloc内存分配策略(1)

    一.linux的内存布局 1.32位模式下内存的经典布局​ 图1 32位模式下内存经典布局 ​ 注:这种内存布局模式是linux内核2.6.7以前的默认内存布局形式 说明:(1)在32的机器上,lo ...

  4. C ——进程内存(内存管理、内存分配(brk,sbrk、mmap、munmap)、内存常见错误)

    内存可以说是C++中很重要很重要的一部分了,我相信这也是C++能够排在编程语言前列的一个原因,因为有了内存管理,使得C++在处理一些底层得程序时,能表现得更加得优秀. 1.进程内存应该分为几部分(内存 ...

  5. Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验三 文件操作算法: 实现在/proc目录下添加文件 Unix/Linux操作系统分析实验四 设备驱动: ...

  6. 内存管理(一)——内存分配

    前言 我们都知道,计算机工作的过程概括起来就是 CPU 去内存中读取指令并执行的过程,但是如果运行我们的程序直接操作物理内存,将会引发很多的问题(比如不同进程之间访问/修改的隔离.权限等等),所以爱操 ...

  7. 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  8. davlik虚拟机内存管理之一——内存分配

    dalvik虚拟机是Google在Android平台上的Java虚拟机的实现,内存管理是dalvik虚拟机中的一个重要组件. 从概念上来说,内存管理的核心就是两个部分:分配内存和回收内存.Java语言 ...

  9. linux 读取内存颗粒,Linux中的内存管理模型浅析

    实际上这是一个内存方面的问题.要想研究这个问题,首先我们要将题目本身搞明白.由于我对Linux内核比较熟而对Windows的内存模型几乎毫不了解,因此在这篇文章中针对Linux环境对这个问题进行探讨. ...

最新文章

  1. 解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题
  2. [HNOI2008] Cards
  3. 用Python画一只蝙蝠
  4. 高薪进大厂 | 面试指南
  5. Java数据结构之线性表(2)
  6. 宝塔无法安装php5,宝塔无法安装phpmyadmin怎么办
  7. ajax如何处理程序设计,Struts与Ajax高级程序设计
  8. tomcat清除缓存配置方法
  9. 2011年计算机二级c++笔记:类的转换
  10. java请求百度短链接_长链接生成短链接Java源码(调用百度接口)
  11. c语言编写界面图形表示,「分享」C语言如何编写图形界面
  12. undefined reference to `swr_init+
  13. atitit.流程标准化--- mysql启动不起来的排查流程attilax总结
  14. LBP算法及其改进算法
  15. 点云与图像融合的深度学习方法综述
  16. 帝国源码php安装文件是哪个,帝国CMS数据库配置文件是哪个
  17. 卸甲归田——回顾CSP2019
  18. 图像处理与计算机视觉:3D射影变换
  19. 程序人生(一) 初生牛犊
  20. linux挂载raw设备,linux创建raw设备

热门文章

  1. Win7提示文件太大无法放入回收站怎么办
  2. 猎豹浏览器小号窗口怎么打开 小号窗口打开方法简述
  3. ​GB28181心跳机制探讨和技术实现
  4. 脚手架 mixin (混入)
  5. 怎么看调用的接口_Hadoop RPC调用实例分析
  6. linux连接svn上代码,代码管理平台介绍、安装svn、客户端上使用svn(linux)、客户端上使用svn(windows)...
  7. 2021曾都二中高考成绩查询入口,2021高考-随州设4个考区11个考点·
  8. Android日志[进阶篇]五-阅读错误报告
  9. 计算机控制系统课程设计中期报告,课程设计中期报告模板.doc
  10. 内部类详解————匿名内部类