概述:监控系统各方面的性能,保障各类服务的有序运行,是运维工作的重要组成部分,本篇就介绍一次常用的系统监控命令和相关的参数说明

具体包含以下几部分:

  1、进程的管理基础 ,主要是讲一下概念性的东西

  2、进程管理类工具【pstree、ps、top、htop、kill、(killall、pkill、pgrep、pidof)】

  3、内存监控类工具【vmstat、pmap】

  4、系统监控类工具【glances、dstat】

本篇文章主要讲解进程的管理基础,主要是以下概念性的东西。



1、进程是什么?

  运行中的程序的一个副本,因为程序可能会同时被运行多次,故可理解为一个副本,每个进程都有生命周期  

linux内核存储进程信息的固定格式,被称为task struct(任务结构体)

多个任务的task struct组成的链表,被称为task list(任务列表)



2、CPU和内存的工作模式总结。

   cpu是分时的:一个进程可占用多少cpu时长,一个cpu在同一时刻只能执行一个任务,CPU自身的寄存器中,存放着正在运行的进程的状态信息,当该进程分配的时间片到了时候,即使该进程没有执行完成,也会被调度出去,让下一个进程放到CPU上去运行,但是对于之前没有执行完成的进程,如果没有一种机制保存下来进程执行到哪里的等等的一些相关信息,那么当下一次轮到该进程执行时,又要重新开始执行,这样是不合理的。为了解决这种问题,就有了保存现场恢复现场的概念

  保存现场:是当正在运行的进程,CPU运行时间到达之后,将进程运行的状态等信息,由内核调度存储到内存中。

  恢复现场:之前保存过的进程的运行状态的信息,当该进程又获得CPU运行时间时,将保存的状态信息调度到CPU上,这样CPU就能根据保存的状态继续运行进程,而不是从头开始运行进程

  内存和磁盘结构差不多,里面也是分空间的,当进程需要用到内存数据的时候,怎么去找内存中不连续的数据呢?

    内存是分空间的:一个进程可占用多少内存空间,内存分配方式有点类似磁盘,分成很多块,但内存不叫块,而是叫页框(page frame)用于存储页面数据,一般一个page的大小为4K。分配的页框可以有多个,且可以不连续。

    因为数据在实际内存中可以不连续,也就是离散的,故一般情况下,内核会虚拟一个内存空间面向进程,进程不需要直接与实际的物理存储的内存打交道,只需与内核虚拟出来的内存打交道(内核虚拟出来的内存的大小,与计算机平台的位数有关系,一般32位系统上,单个进程虚拟出来的内存大小为4G,1G给内核使用,3G给该进程使用;64位系统上,单个进程虚拟出来的内存大小为4G个4G),内核虚拟出来的内存空间叫做线性地址空间,内核虚拟出来的内存对进程而言是连续,且独占的。这样,进程读写内存数据时就认为自己读取的是一个连续的地址空间,且是独占的,这段虚拟出来的空间中,只有真正被使用的部分,内核才会在物理内存上分配空间进行存储

  swap分区:为了防止过多的进程将实际物理内存占满导致程序无法运行,从而有了swap交换分区的概念,swap分区实际是用来临时存放内存中暂时用不到的页面数据。置换时,通常采用LRU算法(很少使用)将最近最少用到的数据暂存在交换分区中

  【如:一次磁盘IO分为两段进行,第一段是将数据从磁盘拿到内存中内核空间,第二段时将内核空间的数据复制一份放到用户空间】



3、线程相关概念 

  线程:是一个进程内部的多个执行流,一个执行流就叫一个线程【注意线程和进程之间的关系】

  一个进程只有一个执行流,也可以有线程,这种模式就叫单进程单线程模型

  一个进程有多个执行流,就叫单进程多线程模型

如果一个进程有多个执行流,也就是有多个线程,但是如果只有1个CPU,那么也多线程也没有任何意义,因为一个cpu在同一时刻只能同时执行一个任务

同一个进程内部的多个线程,可以共享内存空间。比如web服务,如果是单进程模型,一个进程相应一个用户请求,如果100个用户请求的都是index.html页面,那么在内存上就需要为每个进程存放都存放一个index.html的数据,这样就造成了内存浪费,但是如果是采用单进程多线程模式,这样利用一个线程相应一个用户请求,这样就只需要为这个进程在内存上存储一份index.html的数据,然后多个线程共享这段数据,这样就大大节约了内存的空间

  什么是常住内存集和虚拟内存集?

    一个进程的数据部分分为指令和数据,程序在执行时,内存中的数据也分指令数据和实际的数据,其中指令数据和部分的实际数据,是不能被交换到交换分区上的,称之为常驻内存集,而有些数据是可以被交换到交换分区上的,称之为虚拟内存集。



4、进程的创建模型

  进程创建:

    init进程:初始化进程,后续的所有用户空间进程管理者(所有进程的父进程)

    其他进程:除了init进程之外,所有进程都由父进程创建,父进程利用fork()系统调用生成,每个进程都是由父进程fork()自身而来,会clone()自身的数据给子进程

在子进程刚被创建时,子进程和父进程使用的是同一段内存空间;一旦子进程需要对该段内存空间的数据进行修改时,就会复制该段内存空间的数据到另外一段内存空间,子进程就指向了新的内存空间。(这种机制叫CoW(写时复制),如果子进程不对数据进程修改,跟父进程使用的内存空间都是同一个,但是一旦子进程要修改数据,就复制一份数据到另一块内存供子进程单独使用,而从此之后,子进程就一直使用新的内存空间了)

进程的终止:

    子进程完成一定的任务之后,释放掉自己占用的资源,然后父进程对子进程进行回收



5、进程的优先级

  0-139:

    1-99:实时优先级 【一般是由系统自己判断,我们不回去手动操作】

    100-139:用户可调度的优先级(数字越小,优先级越高) 【用户可以修改的】

  nice值:-20到19分别对应100-139,进程初始时nice默认都为0,普通用户只能调低自己的优先级,也就是加大自己的nice值,而管理员用户可以任意指定

  修改进程的优先级:nice、renice命令 ,怎么调整见篇章三

    可调整的区间为100-139

  通过调整nice值可以调整进程的优先级:

  nice值的范围为-20到19,分别对应进程优先级的100-139

  进程启动时的默认nice值都为0,故其默认优先级为120

  普通用户:只能调大nice值,也就是降低优先级,不能低于0

  管理员:可以任意调整nice值-20到19



6、进程队列【要知道什么是运行队列?什么是过期队列?为什么是140?】 

  Linux内核为了能够快速的实现这些优先级不同的进程的调度,将待运行的进程按照对应的优先级分成了140个运行队列,每个优先级相同的进程为同一个队列,这样,内核进行调度时,不需要遍历整个队列,而是按照优先级从高到低,取队列的第一个进程进行调度

同时也有140个过期队列,就是将上面运行队列中,调度过的进程,在为其分配的CPU时间片的时间内尚未运行完成,就放到了过期队列,当同优先级的运行队列中的进程都被调度完成后,就会重新调度过期队列,此时过期队列就变成了运行队列



7、进程类型

  守护进程(daemon):跟终端无关,由内核在系统引导过程中启动的进程

  用户前台进程:用户通过终端启动的进程,跟终端相关

注意:也可以把前台启动的进程转到后台,以守护进程运行



8、进程的状态【理解5中状态】

  运行状态:running,进程正在运行中

  就绪状态:ready,可以运行但尚未运行

  睡眠状态:sleeping,

    可中断睡眠:interrupt,调度到CPU上可立即运行起来

    不可中断睡眠:uninterruptible,通常是指I/O阻塞的进程,等待I/O完成之前无法继续运行

  僵死状态:zombie,找不到归属,父进程没有回收该进程,父进程就挂了

  停止状态:stopped,暂停与内存中,处于不可被调度并运行的状态



9、进程间的通信机制(IPC:Inter Process Communication)

  同一主机上:

    信号通信(通过kill命令):signal

    共享内存shm:shared memory

  不同主机上面:

    rpc:remote procedure call (NFS介绍基于这种机制)

    套接字socket:IP和端口号

【进程/作业】篇章一:Linux进程及其管理(进程的管理基础)的更多相关文章

  1. 第一次作业:基于Linux 4.5的进程模型与调度器分析

    1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...

  2. Linux进程作业常用命令

    从鸟哥的私房菜书里摘抄的部分,方便查阅 一.作业管理     1.直接将命令放到后台执行的&         如想将/etc 备份为/tmp/ect.tar.gz时不想等待,可以这样做:    ...

  3. 详解Linux进程(作业)的查看和杀死

    目录: 引入进程 进程 线程 PS命令 TOP命令 其他查看进程命令 进程的优先级 作业控制机制 kill命令 一.引入进程 1.内存划分为:用户空间和内核空间 1.在用户空间里运行的进程,就是用户进 ...

  4. linux 的服务与进程管理(二)

    2.linux 的服务与进程管理 [2.1]系统启动流程 简单的介绍下linux的系统启动流程,方便我们深入了解linux操作系统,对排除linux系统故障进行帮助.启动流程虽然简单但背后还有着更加复 ...

  5. Linux进程作业的查看和杀死

    引入进程 进程 线程 PS命令.TOP命令.其他查看进程命令 进程的优先级 作业控制机制 kill命令 一.引入进程 1.内存划分为:用户空间和内核空间 1.在用户空间里运行的进程,就是用户进程,所属 ...

  6. Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python

    作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...

  7. linux管理进程的链表

    linux2.6.11的内核中,为了方便管理linux的进程,主要建了5种linux链表.每个链表节点之间的互联有两种方式,一种是hash节点之间的互联,通过hlist_node的数据结构来实现:另一 ...

  8. linux内核分析之进程地址空间管理

    1.struct task_struct 进程内核栈是操作系统为管理每一个进程而分配的一个4k或者8k内存大小的一片内存区域,里面存放了一个进程的所有信息,它能够完整的描述一个正在执行的程序:它打开的 ...

  9. linux进程,作业,守护进程,进程间同步

    ps axj命令查看系统中的进程.参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息: 凡是TP ...

随机推荐

  1. 题解 洛谷 P2612 【[ZJOI2012]波浪】DP+高精

    题目描述 题目传送门 分析 因为有绝对值不好处理,所以我们强制从小到大填数 设 \(f[i][j][p][o]\) 为当前填到了第 \(i\) 个数,波动强度为 \(j\),有 \(p\) 个连续段并 ...

  2. qsort的cmp函数理解

    qsort使用 近期频繁使用qsort函数,但是对于cmp函数却一直不太熟悉,现用现查.故写一篇小笔记记录一下. 函数原型: void qsort(void *base,size_t NumEle,s ...

  3. 使用douban源下载python包

    需求 python默认使用国外源下载依赖包,由于一些其它因素(例如网络差了,国外机器炸了,我们强大的祖国了...)经常导致下载安装失败,so出现了以豆瓣为主的国内下载源 如何使用豆瓣进行下载 豆瓣下载 ...

  4. python核心高级学习总结7---------正则表达式

    正则表达式在爬虫项目中应用很广泛,主要方面就是在字符串处理方面,经常会涉及到字符串格式的校验,用起来经常要查看文档才能完成,所以抽了个时间将正则的内容复习了一下. Start re---导入re模块使 ...

  5. 第5.4节 Python函数中的变量及作用域

    一.函数中的变量使用规则 函数执行时,使用的全局空间是调用方的全局空间,参数及函数使用的局部变量存储在函数单独的局部名字空间内: 函数的形参在函数中修改了值时,并不影响调用方本身的数据,但如果形参是一 ...

  6. 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一.    引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...

  7. jq中$(function(){})和js中window.onload区别

    先看下执行代码: $(function(){   console.log("jq");}) $(function(){   console.log("jq1") ...

  8. AtCoder Regular Contest 107(VP)

    Contest Link Official Editorial 比赛体验良好,网站全程没有挂.题面简洁好评,题目质量好评.对于我这个蒟蒻来说非常合适的一套题目. A. Simple Math Prob ...

  9. 廖雪峰官网学习js 数据类型和变量

    数据类型: number 不分整数 和浮点数 字符串 用' '      "  "   表示 布尔值  true  false && 与运算符(都ture才ture ...

  10. MVC-采用Bundles方式引入css和js文件

    优点:修改js或css时会自动生成hash版本号. 缺点:需要在BundleConfig中先添加对应的文件,然后在html中再引用对应的bundle,多操作了一步. web.config中 <c ...