Linux 相关文章LinuxLinux学习之路

Linux 之 进程管理 -- 进程观察

2019-10-05  本文已影响0人  熊猫人和熊猫猫

学习进程管理的原因(~就是要学会解决下面的👇问题啊~)

  • 在当整个系统资源快要被使用光时,能够找出最耗系统的那个进程,然后删除该进程,让系统恢复正常。
  • 此外,如果由于某个程序写的不好,导致产生一个有问题的进程在内存中,你又如何找出他,然后将他移除?
  • 如何同时有五六项任务在系统当中运作,但其中只有一项任务才是最重要的,该如何让那一项重要的任务被最优先执行呢?

发现问题是解决问题的第一步~通过 进程观察 来寻找问题~
原本是想要把进程观察和进程管理写在一起,但是内容有点多,本着偷懒原则,一篇文章可以分两篇来发,何乐不为?

这篇文章主要通过3个方向来观察和寻找问题:
一、ps撷取和观察 某个时间点 的进程运作情况;
二、top持续 侦测进程运作 的状态;
三、pstree查找进程相关性(查找父进程)

1. ps 将某个时间点的进程运作情况撷取下来

这里只记两个常用的ps指令 ps -lps aux

1.1 ps -l 仅观察自己的bash相关进程

通过ps -l我们可以获取哪些信息呢?还是借用鸟哥的图

ps -l 仅观察自己的bash相关进程
这串串密密麻麻的字母和数字是什么意思呢?
解释一下图中 ps -l 的第三行:
bash的程序属于UID为0的使用者,状态为睡眠(sleep),之所以为睡眠是因为他触发了ps(状态为run)的原因。此进程的PID为14836,优先执行顺序为80,下达bash所取得的终端接口为pts/0,运作状态为等待(wait)

下面就依据👆图片,从左到右的顺序,啰嗦一下吧

1.2 ps aux观察系统所有的进程

ps aux 观察系统所有进程-1
ps aux 观察系统所有进程-2

ps -l 和 ps aux显示的项目并不相同

1.3 简单认识ps的其他操作 ps -lAps axjf

这里小小解释一下,ps -lAps -l的输出形式相同,都是F、S、UID、PID等等依次向右排开的,但是ps -lA明显信息量比ps -l多好多,因为 ps -lA显示的是系统所有的进程。(ps -l仅显示自己bash相关进程)

ps -lA 和 ps axjf
ps axjf 形成了一个进程树,各进程之间的关系更加直观了(其实和pstree的功能类似,下面第3部分会详细提到)。

这里插入一个小知识点😁~
僵尸进程
通常,造成僵尸进程的成因是因为该进程应该已经执行完毕,或者是因故应该要终止了。但是该进程个的父进程却无法完整的将该进程结束掉,而造成那个进程一直存在内存当中。如果你发现在某个进程的CMD后面还接上<defunct>时,就代表该进程是僵尸进程。

看看 僵尸进程 长什么样子

僵尸进程的出现是因为程序写的不好或者使用者的操作习惯不良等等造成的。当发现系统中有很多僵尸进程时,记得找出该进程的父进程,然后追踪,最后好好的进行主机的环境优化。(有时需要透过reboot的方式来将僵尸进程抹去,reboot是啥?-- 重启计算机~)

2 top 动态观察进程的变化

topps对比着理解:ps是撷取一个时间点的进程状态,top则可以持续侦测进程运作的状态

2.1 top的工作模式

工作模式: top [-d 数字] | top [-bnp]

使用了top之后,一直有数据霸占着屏幕,你将看不到命令行了。
有必要了解以下几个按键指令:

在top执行过程中可以使用的按键指令
:显示在top当中可以输入的按键指令
P:以CPU使用的资源排序显示
M:以Memory 的使用资源排序显示
N:以PID来排序
T:由该Process使用的CPU时间累积(TIME+)排序
k:给予某个PID一个讯号(signal)
r:给予某个PID重新制定一个nice值
q:离开top软件的按键

top也可以用来查看自己本机的运行状态,windows可以用putty,MAC可以用terminal,在命令行中输入top...

2.2 认识top提供的信息

下面👇是top动态观察进程变化的截图(来自鸟哥)


top 动态观察进程的变化

top主要分为两个画面:上面6行为整个系统的资源使用状态;下面是每个process使用资源情况

(1) top画面之 系统资源使用状态

上面的画面为整个系统的资源使用状态,基本上总共有六行,显示的内容依次是:

(2) top画面之 process使用的资源情况

top 下半部分的画面

top预设使用CPU使用率(%CPU)作为排序的重点

  • 按指令键 M 使用内存(%MEM)使用率排序,
  • 按指令键 P 恢复最初的排序
  • 按指令键 Q 离开top

2.3 通过top仅观察一个已知ID的进程

前面我们知道,top预设是使用CPU使用率作为排序的重点,如果我想要查看的进程CPU使用率不高,排在后面不方便查看怎么办?就可以通过这种方式查看指定的进程。(前提是你要知道进程的PID是啥)

我们以自己登入系统的bash为例吧👇
首先通过echo $$ 获得自己bash的PID,再通过top -d -p 14836查看

top观察自己登入系统的bash进程-1
top观察自己登入系统的bash进程-2

~更改NI的小插曲~
从上面我们可以看到 PID为14836的这支进程NI为0,我想要更改为10怎么办?

  • 1.在top画面中直接按下r键,top上画面的第六行就会如此显示PID to renice [default pid = 14836]
  • 2.直接输入你要更改的PID号码 14836,第六行显示:Renice PID 14836 to value
  • 3.最后输入10就可以了


    更改NI后的图

3 pstree查找进程之间的相关性

直接在命令行中输入pstree便可以查到进程相关性,还会使用线段将相关性进程连结起来。不过为了能够让进程树更清晰易懂,还是要加上参数~

工作模式 pstree [-AIU] [-up]

  • - A :各进程树之间的连接以ASCII字符来连结
  • - U:各进程树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误
  • -p:并同时列出每个process的PID
  • -u:并同时列出每个process的所属账号名称
上一篇 下一篇

猜你喜欢

热点阅读