一、进程基本概述
- 什么是进程
比如: 开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。
总结一句话就是: 当我们运行一个程序,那么我们将运行的程序叫进程。 - 程序和进程的区别
程序: 静态的概念,可以永久存储在系统中。
进程: 动态的概念,程序运行的过程,当我们结束该进程,进程就随之的销毁了,但是程序还存储在系统中。 - 进程的生命周期
当父进程接收到任务调度时,会通过fock派生子进程来处理,那么子进程会继承父进程属性。
1.子进程在处理任务代码时,父进程会进入等待状态中…
2.子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源。
3.如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成僵尸进程。
PS: 每个进程都父进程的PPID,子进程则叫PID。 - 孤儿进程和僵尸进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。(会占用资源)
二、监控进程状态
-
输入ps aux
含义:USER 进程运行的用户身份( 每一个进程,都需要一个特定的用户身份来运行 ) PID 子进程的身份标识 ( 就是一种标识,用来区分不同的进程 ) %CPU 该进程占用CPU的百分比是多少 %MEM 该进程占用内存的百分比是多少 VSZ 虚拟内存 RSS 实际占用内存 TTY 该进程是哪个终端运行的 ? 表示是系统运行的 pts/0 pts/1 来源的终端是哪一个 STAT 进程所表示的状态( 运行 暂停 停止 .......) START 进程启动时间 TIME 进程占用CPU的时间 COMMAND 运行该进程需要执行的命令 [ ] 表示内核启动的进程
-
STAT进程状态详解
进程状态例:R、S、Ss、SN、S<…
STAT基本状态 | 描述 | STAT状态+符号 | 描述 |
---|---|---|---|
R | 进程运行 | s | 进程是控制进程, Ss进程的领导者,父进程 |
S | 可中断进程 | < | 进程运行在高优先级上,S<优先级较高的进程 |
T | 进程被暂停 | N | 进程运行在低优先级上,SN优先级较低的进程 |
D | 不可中断进程 | + | 当前进程运行在前台,R+该表示进程在前台运行 |
Z | 僵尸进程 | l | 进程是多线程的,Sl表示进程是以线程方式运行 |
-
输入top实时监视进程
含义:us: 用户进程占用cpu百分比( 视频加密、视频解码 ) sy: 内核进程占用cpu百分比 ( 比如 网卡、硬件设备、硬盘 ) ni: 优先级高的进程占用cpu百分比 id: 空闲的百分比 ( 值越大、说明服务器越空闲 ) wa: 用户请求磁盘资源,磁盘很慢慢慢,请求的资源很多,会造成大量的等待程序 ( 数据库 ) hi: 硬中断 si: 软中断 st: 当该服务器运行了很多的虚拟机,这些虚拟机总共占用当前物理服务器的百分比是多少
不可能用top去每台服务器观察,后期将所有的服务器通过监控,统一的监控起来
- top常见指令
字母 | 含义 |
---|---|
h | 查看帮出 |
1 | 数字1,显示所有CPU核心的负载 |
z | 以高亮显示数据 |
b | 高亮显示处于R状态的进程 |
M | 按内存使用百分比排序输出 |
P | 按CPU使用百分比排序输出 |
q | 退出top |
中断
- 中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。
- 由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。 如果中断本身要做的事情不多,那么处理起来也不会有太大问题;但如果中断要处理的事情很多,中断服务程序就有可能要运行很长时间。 特别是,中断处理程序在响应中断时,还会临时关闭中断。这就会导致上一次中断处理完成之前,其他中断都不能响应,也就是说中断有可能会丢失。
- 硬中断和软中断
网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了。这时,内核就应该调用中断处理程序来响应它。 对上半部来说,既然是快速处理,其实就是要把网卡的数据读到内存中,然后更新一下硬件寄存器的状态(表示数据已经读好了),最后再发送一个软中断信号,通知下半部做进一步的处理。 而下半部被软中断信号唤醒后,需要从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析和处理,直到把它送给应用程序。
所以,这两个阶段你也可以这样理解: 上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行; 而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行。
- 硬软中断小结
Linux 中的中断处理程序分为上半部和下半部: 上半部对应硬件中断,用来快速处理中断。 下半部对应软中断,用来异步处理上半部未完成的工作。 Linux 中的软中断包括网络收发、定时、调度、等各种类型,可以通过查看 /proc/softirqs 来观察软中断的运行情况。
(为什么大量的网络小包会导致性能问题?因为大量的网络小包会导致频繁的硬中断和软中断,所以大量网络小包传输很慢,但如果将网络包一次传递,会快很多。)