什么是进程?
开发写的代码,我们称为程序。
而当我们运行一个程序时,那么我们将运行的程序叫进程
区别?
程序:静态的概念,可以永久存储在系统中
进程:动态的概念,程序运行的过程。当我们结束该进程,进程就随之的销毁了,但是程序还存储在系统中。
人的生命周期:一个从开始到结束的过程。但是也有走不了全部的。
进程的生命周期:
总结:父进程接到一个任务,会派给子进程,而自己只需要等子进程完成任务。自己回收任务就是了。它不会等待,会去做其他的事。
子进程在任务过程中死了,就会变成僵尸进程。
父进程在子进程的任务过程中死了。子进程会变成孤儿进程,然后会被最高的进程system收管。然后继续执行。
父进程叫ppid 子进程叫pid
僵尸进程与孤儿进程的区别:
孤儿进程是子进程还在运行,而父进程挂了,子进程被init进程收养。僵尸进程是父进程还在运行但是子进程挂了,但是父进程却没有使用wait来清理子进程的进程信息,导致子进程虽然运行实体已经消失,但是仍然在内核的进程表中占据一条记录,这样长期下去对于系统资源是一个浪费。僵尸进程将会导致资源浪费,而孤儿则不会。
监控进程的状态
静态:就是某一时刻的状态。不在变化。ps -aux
动态:就是一直在时刻变化。
ps aux的每一列的意思(静态的)
USER 进程运行的身份用户(每一个进程,都需要一个特定的用户身份来运行)
PID 进程的身份标识 (就是一个标识,用来区分不同的进程)
%CPU 该进程占用CPU的百分比是多少
%MEM 该进程占用内存的百分比是多少
VSZ 虚拟内存
RSS 实际占用内存
TTY 该进程是哪个终端运行的 ? 表示是系统运行的。pts/0 pts/1 来源的终端是哪一个
STAT 进程所表示的状态(运行 暂停 停止)
START 进程启动的时间
TIME 进程占用CPU的时间 (就是处理你这个进程,cpu使用的时间,cpu是纳秒计算的)
COMMAND 运行该进程所执行的命令 【】 表示内核启动程序
STAT基本状态 描述
R 进程运行
S 可中断进程
T 进程被暂停
D 不可中断进程
Z 僵尸进程
s 进程是控制进程, Ss进程的领导者,父进程
< 进程运行在高优先级上,S<优先级较高的进程,是可中断其他进程。
N 进程运行在低优先级上,SN优先级较低的进程,也可被高优先级的中断
当前进程运行在前台,R+该表示进程在前台运行
l 进程是多线程的,Sl表示进程是以线程方式运行
(就是你的qq,本身是程序,运行起来是进程,在进程上会有很多的线程,可以同时间做多事)
STAT:
R R+ S T D Ss S< Ss l (常用的)
动态的 top (3秒变化一次)
w:
11:20:10 up 6 days, 7:46, 2 users, load average: 0.01, 0.02, 0.05
uptime:
11:20:14 up 6 days, 7:46, 2 users, load average: 0.01, 0.02, 0.05
top:
11:18:15 up 6 days, 7:44, 2 users, load average: 0.08, 0.03, 0.06
当前时间 运行时间(无重启) 当前用户 平均负载 1分 5分 15分
Tasks:(任务栏)(cpu在同一时刻,只能运行一个程序)
112 total, 1 running, 110 sleeping, 1 stopped, 0 zombie
总任务 处理进程 等待进程 停止进程 僵尸进程
%Cpu(s): 占用百分比
0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us: 用户进程占用cpu百分比( 视频加密、视频解码 )
sy: 内核进程占用cpu百分比 ( 比如 网卡、硬件设备、硬盘 )
ni: 优先级高的进程占用cpu百分比
id: 空闲的百分比 ( 值越大、说明服务器越空闲 )
wa: 用户请求磁盘资源,磁盘很慢慢慢,请求的资源很多,会造成大量的等待程序 ( 数据库 )
hi: 硬中断
si: 软中断
st: 当该服务器运行了很多的虚拟机,这些虚拟机总共占用当前物理服务器的百分比是多少
不可能用top去每台服务器观察,后期将所有的服务器通过监控,统一的监控起来。
PR 20 10 0
NI 0 -10 -20 优先级
top 常见指令
字母 含义
h 查看帮出
1 数字1,显示所有CPU核心的负载
z 以高亮显示数据
b 高亮显示处于R状态的进程
M 按内存使用百分比排序输出
P 按CPU使用百分比排序输出
q 退出top
中断:
是系统用来响应硬件设备请求的一种机制,会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。
为啥要有中断?
很简单,你在处理一个事情,但是这个事情又不用你做什么,只需要你等着。但是在等待的过程中,你又不能去做其他事。就会出现时间被浪费。所以就需要中断。就是这个问题让它自己处理着,我去做其他事,它处理完了,或者处理出现问题了,然后提示我。我在这个时候,在去处理这个事情。就变成两不耽误。
简单讲:就是当系统出现问题的时候,会出现中断的请求,然后这个时候去解决的这个问题。来达到系统的并发处理能力。
中断会带来的问题?
因为在中断处理程序出现的时候,会打断其他程序的正常运行,而必须先处理它的问题。那这个时候,如果耽误的时间太久,就会对正常程序产生影响。
并且,中断处理程序在响应中断的过程中,还会临时关闭中断。只处理这一个中断。而这个时候,其他中断就进不来的,那么这个进不来的中断就可能会丢失。导致我们不知道这个中断带来的是什么问题。
如何处理中断处理程序执行过长和中断丢失的问题?
Linux将中断处理过程分为两阶段 :上阶段和下阶段
上阶段用来快速处理中断,它在中断禁止模式下运行。主要处理跟硬件紧密相关工作。就是所谓的硬中断。特点就是:快速执行
下阶段用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。就是所谓的软中断,特点:延迟执行。
Linux中的软件中断包括网络收发,定时,调度等各种类型,通过/proc/softirqs来查看中断的运行情况。
f: 经常听同事说大量的网络小包会导致性能问题,为什么呢?
q: 因为大量的网络小包会导致频繁的硬中断和软中断?
所以大量网络小包传输很慢,但如果将网络包一次传递,是不是会快很多呢?