Linux 进程资源分配,linux 进程管理和内存分配

1、进程相关概念

进程:正在运行中的程序

内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

Process:运行中的程序的一个副本,是被载入内存的一个指令集合

进程 ID(Process ID,PID)号码被用来标记各个进程

通常从执行进程的用户来继承,存在生命周期

task struct 任务结构表:Linux 内核存储进程信息的数据结构格式

task list 任务列表:多个任务的 task struct 组成的链表

进程创建:

都由其父进程创建,父好关系,CoW(写时复制,不发生改变时父子都指向同一文件;发生改变时,则复制)

init:第一个进程(centos6:init,centos7:systemd)

守护进程:随着计算机的开启、关闭而随之开启、关闭。

2、进程,线程和协程:

0e48920ffe3703c9a6b2b18cc9845444.png

注:一个进程里至少有一个线程;线程之间由操作系统进行调度,包括进程中使用的资源也由操作系统进行调度;协程相当于线程中的语句块,由线程控制。

3、Page Frame:页框,用存储页面数据,存储 Page,每个进程要使用的分配空间

虚拟内存(线性内存):进程运行的时候以为自己拥有了全部的内存空间

物理地址空间和线性地址空间:

MMU:负责转换线性和物理地址(虚拟内存和物理内存)

TLB:翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存

LRU:近期最少使用算法,释放内存

4、用户空间和内核空间:

db573830fea08980e88f3d770d1aae23.png

5、进程之间基本状态和转换:

502be32abaf72233be1a1480f2f12c90.png

创建状态:进程在创建时需要申请一个空白 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、进程优先级

f664d81ec213a6feee9894b298840713.png

实时进程(realtime),基于 FIFO 先进先出或 RR 轮询

非实时进程:nice 按时间片分配进程

取 139 个队列,将相同优先级的放在一个队列中,运行一个时间片后从运行队列转至过期队列。轮回运行队列和过期队列互调,再运行。

e94ff0c56da5fd7bef4871383eb5b431.png

进程优先级:系统优先级:数字越小,优先级越高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.& &  &  & }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV 例程300篇】234. 特征提取之主成分分析(PCA)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】234. 特征提取之主成分分析(PCA) 5.1 特征提取的方法 初步获取的图像特征维数通常很大,而且往往包含一定的无关或冗余特征。特征提取是指从原始特征中通过数学变…

Java并发编程基础

线程的简介 什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 为什么要使用多线…

【OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV) 文章目录【youcans 的 OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV)5.2 主成分分析的数学方法5.4 OpenC…

linux 访问共享内存,Linux下的共享内存(03)---通过指针访问共享内存中的数据...

环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、将共享内存挂载至进程:void *shmat(int shmid, const void *shmaddr,int shmflg);参数shmid是要附加的共享内存区标示符。总是把参数shmaddr设为0。参数shmflg可以为SHM_RDON…

Java中锁的使用和实现

首先,我们要了解一个概念,JAVA中的锁到底是什么呢? 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 Lock接口 在Java SE 5之后,并发包中新增了Lock接口&am…

【OpenCV 例程200篇】225. 特征提取之傅里叶描述子

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】225. 特征提取之傅里叶描述子 目标特征的基本概念 通过图像分割获得多个区域,得到区域内的像素集合或区域边界像素集合。我们把感兴趣的人或物称为目标,目标所处的区域就是目…

【OpenCV 例程300篇】238. OpenCV 中的 Harris 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】238. OpenCV 中的 Harris 角点检测 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界。 角是高度有效的特征。角点检测&…

基础线性规划实现(matlab,lingo)

目录 一、本次所需解的问题 二、matlab解题 1)语法 2)数学思维 3)matlab解题 运行结果: 三、lingo解题 lingo解题如下: 运行结果: 最后: 一、本次所需解的问题 需解出下面该线性规划问…

cwntos linux kde桌面,Centos如何安装KDE的桌面

其实KDE其实在初次安装系统的时候就可以选择,我下面是进入系统后的安装方法:第一步:检查KDE首先查看自己是否安装了KDE# yum grouplist在grouplist的输出结果中的“Installed Groups:”部分中,如果你能找到“X Window System”和“…

【OpenCV 例程 300篇】239. Harris 角点检测之精确定位(cornerSubPix)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】239. Harris 角点检测之精确定位(cornerSubPix) 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界…

基础线性规划实现---python

目录 一、问题 何为线性规划问题: 二、python进行求解 1.通过观察matlab解线性规划步骤进行求解 2.python求解步骤 1)求解用到的模块(scipy 和 numpy): 2)对 max z2x13x2-5x3 该问题确定c如下&…

【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界。 角是高度有效的特征。角点检测…

多元统计分析1

第一章 多元正态分布 文章目录 1.1 多元分布的基本概念 1.1.1 随机向量 1.1.2 分布函数与密度函数 联合分布函数: 联合密度函数: 条件密度函数: 分量的独立性: 1.1.3 随机向量的数字特征 1.随机向量的均值 2、随机…

Java并发容器和框架

ConcurrentHashMap 我们为什么要使用 ConcurrentHashMap呢? 原因有三: 并发编程中HashMap会导致死循环;HashTable效率又非常低;ConcurrentHashMap的锁分段技术可有效提升并发访问率。在并发编程使用HashMap会导致死循环。 在多线…

【OpenCV 例程 300篇】241. 尺度不变特征变换(SIFT)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】241. 尺度不变特征变换(SIFT) 6.4.1 简介 尺度不变特征转换算法(Scale-invariant feature transform,SIFT)是图像处理中经典的局部特征描…

整数线性规划实现(matlab分枝界定法)

文章目录 一、本次问题 1.利用第一天所学知识求解: 2.本题理解: (1)分支界定法 背景: 基本理论(解题步骤): 求解实现1: 1.第一步 2.第二步 3.第三步 4.第四步…

linux opencv gtk 没窗口,OpenCV GTK+2.x error

可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):问题:I had installed OpenCV following these steps ().After trying to compile one examples,i got this error :OpenCV Error: Unspecified error (The function …

硬盘分区

我们买回一台全新的笔记本的时候,我们会发现里面只有一个硬盘,这个时候为了满足我们的需求我们往往要对硬盘进行分区,那麽如何正确的对硬盘进行分区的呢? 下面教大家如何正确的对电脑硬盘进行分区操作。 操作方法 1、在桌面上找…

python入门:Anaconda和Jupyter notebook的安装与使用

文章目录 一、安装和使用Anaconda 1、anaconda是什么? 2、为什么需要安装anaconda? 3、如何安装anaconda? 通过官网下载页面 开源软件下载 安装步骤: 4、jupyter汉化 5、如何管理包? 1.列出已安装的包 2.安装…

非线性规划(1)

目录 一、非线性规划的定义 二、非线性规划的模型 三、非线性规划函数 四、线性不等式约束 五、线性不等式和等式约束 六、带有非线性约束的求最值 七、非线性约束 总结: 一、非线性规划的定义 前面我们学了线性规划,整数规划,我们可…