linux进程管理实验报告_Linux系统管理—进程管理
linux 系统管理--进⼊管理
⼀、进程基本概述
1.什么是进程?
⽐如:windows上安装的QQ,我们会将其称为QQ程序,那么当QQ运⾏之后,在任务管理器中,我们可以看到QQ程序在运⾏着,此时,我们称其为:QQ进程。
⾔简意赅总结:当我们运⾏⼀个程序,那么我们将该程序叫进程
注意:
1.当程序运⾏为进程后,系统会为该进程分配内存,以及运⾏的⾝份和权限。
2.在进程运⾏的过程中,服务器上会有各种状态来表⽰当前进程的指标信息。
进程是已启动的可执⾏程序的运⾏实例,进程有以下组成部分:
局部和全局变量当前的调度上下⽂分配给进程使⽤的系统资源,例如⽂件描述符、⽹络端⼝等给进程分配对应的pid,ppid
2.程序和进程的区别?
1.程序是开发写出来的代码,是永久存在的。数据和指令的集合,是⼀个静态的概念,⽐如/bin/ls、/bin/cp等⼆进制⽂件。
2.进程是⼀个程序的运⾏过程,会随着程序的终⽌⽽销毁,不会永远在系统中存在。是⼀个动态概念,进程是存在⽣命周期概念的。
3.进程的⽣命周期
程序运⾏时进程的状态关系:
1.当⽗进程接收到任务调度时,会通过fork派⽣的进程来处理,那么⼦进程会集成⽗进程的⾐钵。
2.⼦进程在处理任务代码时,⽗进程会进⼊等待的状态...
3.如果⼦进程在处理任务过程中,⽗进程退出了,⼦进程没有退出,那么这些⼦进程就没有⽗进程来管理了,就变成了僵⼫进程。
4.每个进程都会有⾃⼰的PID号,(process id)⼦进程则PPID
⼆、监控进程状态
1.使⽤ps命令查看当前的进程状态(静态查看)
常⽤组合:ps aux 查看进程
[root@zls ~]# ps auxa:显⽰所有与终端相关的进程,由终端发起的u:显⽰⽤户导向的⽤户列表x:显⽰所有与终端⽆关的进程
在多任务处理操作系统中,每个CPU(或核⼼)在⼀个时间点上只能处理⼀个进程。
在进程运⾏时,它对 CPU 时间和资源分配的要求会不断变化,从⽽为进程分配⼀个状态,它随着环境要求⽽改变。
USER:      //启动程序的⽤户PID:        //进程ID%CPU:      //占⽤CPU的百分⽐%MEM:      //占⽤内存的百分⽐VSZ:        //虚拟内存集(进程占⽤虚拟内存的空间)RSS: 案例⼀:PS命令查看前台进程转换到停⽌
#在终端上运⾏vim[root@zls ~]# #查看vim运⾏的状态,S:睡眠状态 +:在前台运⾏[root@
zls ~]# ps aux|grep [v]imroot      1306  0.0  0.2 151664  5180 p 案例⼆:PS命令查看不可中断状态
#在终端上运⾏tar命令[root@zls ~]# tar zcf /etc/ /usr/ /var/ /usr/#持续查看tar进程的状态[root@zls ~]# ps aux|grep [t]arroot      1348 13.3  0.0 124008  170案例三:PS命令查看进程Ss+状态
#过滤bash进程,再开启终端[root@zls ~]# ps aux|grep [b]ashroot      1127  0.0  0.1 115436  2084 tty1    Ss  11:49  0:00 -bashroot      1180  0.0  0.0 115436  1了解进程如下选项:
PID,PPID当前的进程状态内存的分配情况CPU 和已花费的时间⽤户UID决定进程的特权
ps命令使⽤⽅法
#对进程的CPU进⾏排序展⽰[root@zls ~]# ps aux --sort %cpu |less#对进程的占⽤物理内存排序[root@zls ~]# ps aux --sort rss |less#排序,实在记不住,那就⾃⼰排
2. 动态监控进程--top 命令
[root@gong ~]# toptop - 22:58:05 up  4:37,  3 users,  load average: 0.00, 0.01, 0.05Tasks:  98 total,  1 running,  97 sleeping,  0 stopped,  0 zombie%Cp
3.中断
硬中断是系统⽤来影响硬件设备请求的⼀种机制,它会打断进程的正常调度和执⾏,然后调⽤内核中的中断处理程序来影响设备的请求举个例⼦:⽐如你定了⼀份外卖,但是不确定外卖什么时候送到,也没有别的⽅法了解外卖的进度,但是配送⼈员送外卖是不等⼈的,到了你这,没⼈接取的话
由于中断处理程序会打断其他进程的运⾏,所以,为了减少对正常进程运⾏调度的影响,中弄断处理程序就需要尽可能快的运⾏,如果中弄
断本⾝要做的事情不多,那么处理起来也不会有太⼤的问题,但是如果中断要处理的事情很多,中断服务程序就有可能要运⾏很长时间。
特别是,中断处理程序在影响中断时,还会临时关闭中断,这就会导致上⼀次中断处理完成之前,其他中断都能不能想到,也就是说中断有
可能会丢失。
还是以外卖为例:加⼊你定了2份外卖⼀份主⾷和⼀份饮料,由2个不同的配送员来配送。这次你不⽤时时等待着,两份外卖都约定了电话取外卖的⽅式。那么问题⼜来
刚才说了丢失⼀次中断,如果对于系统来说,每次都只能处理⼀次中断,那就很刺激了,天天都在丢失中断,⽤户的请求发过来,没想到,
还做个P的运维,回家种地吧...
软中断:
事实上,为了解决中断处理程序执⾏过长的和丢失中断的问题,Linux将中断处理过程分成了两个阶段:
第⼀阶段:⽤来快速处理中断,它在中断禁⽌模式下运⾏,主要处理跟硬件紧密相关⼯作
第⼆阶段:⽤来延迟处理第⼀阶段未完成的⼯作,通常以内核线程的⽅式运⾏。
还是外卖的那个例⼦:第⼀阶段:当你接到第⼀个配送员电话时,你可以跟他说,你已经知道了,其他事见⾯再细说,然后就可以挂断电话了。第⼆阶段:才是
当⽹卡在接收数据包的时候,会通过硬中断的⽅式通知内核,有新数据到了。这时,内核就应该调⽤中断处理程序来影响它。对第⼀阶段来
说,既然是快速处理,其实就是把⽹卡接收到的数据包,先放置内存当中,然后更新⼀下硬件寄存器的状态(表⽰数据已经读好了),⽽第⼆
阶段,被软中断信号唤醒后,需要从内存中到⽹络数据,再按照⽹络协议栈,对数据进⾏逐层解析和处理,直到把它发送给应⽤程序。
总结:
第⼀阶段:直接处理硬件请求,也就是我们常说的硬中断,特点是快速执⾏。
第⼆阶段:由内核触发该请求,也就是我们常说的软中断,特点是延迟执⾏。
4.Linux软中断与硬中断⼩结:
1.Linux中中断处理程序分为上半部和下半部:
上半部对应硬中断,⽤来快速处理
下半部对应软中断,⽤来异步处理上半部未完成的⼯作
2.Linux中的软中断包括:⽹络收发,定时,调度等各种类型,可以通过/proc/softirqs来观察中断的运⾏情况
在企业中,会经常听说⼀个问题,就是⼤量的⽹络⼩包会导致性能问题,为啥呢?
因为⼤量的⽹络⼩包会导致频繁的硬中断和软中断,所以⼤量的⽹络⼩包传输速度很慢,但如果将所有的⽹络⼩包"打包","压缩"⼀次性传输,是不是会快很多。就好⽐top命令使⽤:
[root@zls ~]# top#指定N秒变化时间[root@zls ~]# top -d 1#查看指定进程的动态信息[root@zls ~]# top -d 1 -p 10126[root@zls ~]# top -d 1 -p 10126,1#查看指定⽤户
5.kill信号管理:
当程序运⾏为进程后,如果希望强⾏停⽌就可以使⽤kill命令对进程发送关闭信号,除了kill还有pkill、killall
定义守护进程的⾓⾊
结束⽤户会话和进程
kill,killall,pgrep,pkill
[root@zls ~]# kill -l //列出所有⽀持的信号//常见信号列表:数字信号信号别名作⽤1      HUP    挂起信号,往往可以让进程重新配置2      INT    中断信号,起6.kill命令发送信号
// 给 vsftpd 进程发送信号 1,15[root@zls ~]# yum -y install vsftpd[root@zls ~]# systemctl start vsftpd//发送重启信号,例如 vsftpd 的配置⽂件发⽣改变,希望重新加载三、进程的优先级[进阶]
优先级指的是优先享受资源,⽣活中的例⼦,⽐如...算了,太多了。
在启动进程时,为不同的进程使⽤不同的调度策略。
nice值越⾼:表⽰优先级越低,例如19,该进程容易将CPU使⽤量让给其他进程。
nice值越低:表⽰优先级越⾼,例如-20,该进程更不倾向于让出CPU。
1.使⽤top或ps命令查看进程的优先级
#使⽤top看优先级[root@zls ~]# toptop - 19:36:33 up  7:47,  4 users,  load average: 0.00, 0.01, 0.05Tasks:  99 total,  1 running,  97 sleeping,  1 stopped,  0 zom 2.使⽤nice命令指定进程优先级
#打开⼀个终端[root@zls ~]# nice -n -5 vim zls#打开另⼀个终端,查看进程的优先级[root@zls ~]# ps aux|grep [v]imroot      2342  0.1  0.2 151720  5212 pts/1    S 3.使⽤renice调整已运⾏程序的优先级
#先查看sshd的优先级[root@zls ~]# ps axo pid,command,nice|grep 折叠shd  869 /usr/sbin/sshd -D            0  1194 sshd: root@pts/0              0  1307 sshd: root@四、企业案例,Linux假死是怎么回事
所谓假死,就是能ping通,但是ssh不上去;任何其他操作也都没反应,包括上⾯部署的nginx也打不开页⾯。
作为⼀个多任务操作系统,要把系统忙死,忙到ssh都连不上去,也不是那么容易的。尤其是现在还有fd保护、进程数保护、最⼤内存保护
之类的机制。
你可以fork很多进程,系统会变得很慢,但是ssh还是能连上去;你可以分配很多内存,但是内存多到⼀定程度oom killer就会把你的进程
杀掉,于是ssh⼜能⼯作了。
有⼀个确定可以把系统搞成假死的办法是:主进程分配固定内存,然后不停的fork,并且在⼦进程⾥⾯sleep(100)。
也就是说,当主进程不停fork的时候,很快会把系统的物理内存⽤完,当物理内存不⾜时候,系统会开始使⽤swap;那么当swap不⾜时会
触发oom killer进程;
当oom killer杀掉了⼦进程,主进程会⽴刻fork新的⼦进程,并再次导致内存⽤完,再次触发oom killer进程,于是进⼊死循环。⽽且oom
killer是系统底层优先级很⾼的内核线程,也在参与死循环。
此时机器可以ping通,但是⽆法ssh上去。这是由于ping是在系统底层处理的,没有参与进程调度;sshd要参与进程调度,但是优先级没
oom killer⾼,总得不到调度。
为什么要费那么⼤的⼒⽓把机器搞死?我们知道假死是怎么产⽣的即可,这样可以针对假死的原因进⾏预防。 (其实假死的情况很少发⽣,
linux用户系统相关命令只有当代码写的bug很多的情况下会出现。)
其实建议使⽤nice将sshd的进程优先级调⾼。这样当系统内存吃紧,还能勉强登陆sshd,进⼊调试。然后分析故障。
五、后台进程管理
通常进程都会在终端前台运⾏,但是⼀旦关闭终端,进程也会随着结束,那么此时我们就希望进程能在后台运⾏,就是将在前台运⾏的进程
放到后台运⾏,这样即使我们关闭了终端也不影响进程的正常运⾏。
企业中很多时候会有⼀些需求:
1.传输⼤⽂件,由于⽹络问题需要传输很久
2.我们之前的国外业务,国内到国外,⽹速很慢,我们需要选择节点做跳板机,那么就必须知道,哪个节点到其他地区⽹速最快,丢包率最
低。
3.有些服务没有启动脚本,那么我们就需要⼿动运⾏,并把它们放到后台
早期的时候,⼤家都选择使⽤&,将进程放到后台运⾏,然后再使⽤jobs、bg、fg等⽅式查看进程状态,太⿇烦了,也不只管,所以我们推
荐使⽤screen和nohup
作业控制是⼀个命令⾏功能,允许⼀个 shell 实例来运⾏和管理多个命令。
如果没有作业控制,⽗进程 fork()⼀个⼦进程后,将 sleeping,直到⼦进程退出。
使⽤作业控制,可以选择性暂停,恢复,以及异步运⾏命令,让 shell 可以在⼦进程运⾏期间返回接受其 他命令。
前台进程,后台进程jobs,bg,fg
ctrl + Z , ctrl +c , ctrl + B
[root@zls ~]# sleep 3000 & //运⾏程序(时),让其在后台执⾏ [root@zls ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台 [2]+ Stopped sleep 4000[root@zls ~]# ps #安装screen命令[root@zls ~]# yum install -y screen#安装redis[root@zls ~]# yum install -y redis#启动redis[root@zls ~]# redis-server#放到后台ctrl + z[1]+  已停⽌
六、系统平均负载[进阶]
每次发现系统变慢时,我们通常做的第⼀件事,就是执⾏top或者uptime命令,来了解系统的负载情况。
[root@zls ~]# uptime 20:45:42 up  8:56,  3 users,  load average: 0.01, 0.03, 0.05#我们已经⽐较熟悉前⾯⼏个例⼦,他们分别是当前时间,系统运⾏时间,以及正在平均负载不就是单位时间内,CPU的使⽤率嘛?上⾯的,0.01不就是CPU的使⽤率是1%
平均负载是指,单位时间内,系统处于可运⾏状态和不可中断状态的平均进程数,也就是平均活跃进程数
PS:平均负载与CPU使⽤率并没有直接关系。
1.可运⾏状态进程,是指正在使⽤CPU或者正在等待CPU的进程,也就是我们⽤PS命令看的处于R状态的进程
2.不可中断进程,(你在做什么事情的时候是不能被打断的呢?...不可描述)系统中最常见的是等待硬件设备的IO响应,也就是我们PS命令中
看到的D状态(也称为Disk Sleep)的进程。
例如:当⼀个进程向磁盘读写数据时,为了保证数据的⼀致性,在得到磁盘回复前,它是不能被其他进程或者中断程序打断的,这个是后续
的进程就处于不可中断的状态,如果此时进程强制被打断,kill -9 ... perfect准备好护照吧,有多远,⾛多远,千万别回来了。不可中断状
态实际上是系统对进程和硬件设备的⼀种保护机制
因此,可以简单理解为,平均负载其实就是单位时间内的活跃进程数。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。