31.Centos7-系统进程管理

目录

1 进程概述和 ps 管理进程

2.进程管理

3.ps 命令

4.free 命令

5.uptime 命令

6.top 命令

7.实战找出系统中使用 CPU 最多的进程 

8.lsof 命令 

9.kill 关闭进程

10.nice -n 命令

11.renice 命令

12.screen命令

13.使用 screen 后台实时执行命令备份命令

1 进程概述和 ps 管理进程

1.1 什么是进程?进程管理需要做什么?

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

• 已分配内存的地址空间;

• 进程 ID;

• 程序的代码;

• 进程状态;

2.进程管理

包括进程调度、中断处理、信号、进程优先级、进程切换、进程状态、进程内存等等。

2.1进程的生命周期图:

 描述如下:

父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程。

所有进程都是第一个系统进程的后代。

centos5 或 6PID 为 1 的进程是:init

centos7 PID 为 1 的进程是:systemd

僵尸进程:不执行代码,占用内存地址空间

当一个进程接收到终止信号时,它结束之前需要一段时间来结束所有任务。

在进程执行所有代码之后,它将相关终止报告发给父进程。父进程正常情况下会移除所有子进程的数据结构。如果父进程没能接收子进程退出信号,那么子进程变为僵尸进程。

所以通常在很短的某个时刻内它是一个僵尸进程。使用 kill 命令是不能杀死僵尸进程的,因为它已经被认定为死亡了。可以尝试杀死僵尸进程的父进程,僵尸进程会随之消失。

如果一个进程为僵尸状态,父进程是 init 或systemd 那么需要重启系统来解决问题。线程:线程是进程中产生的一个执行单元,在同一个进程中与其他线程并行运行。线程之间可以共享资源,比如内存、地址空间、打开文件等。

2.2上下文切换:

在处理器执行期间,运行进程的信息被存储在处理器的寄存器和高速缓存中。

执行的进程被加载到寄存器的数据被称为上下文。

在实际处理器运行过程中,先存储运行进程的上下文。

然后将下一个要运行的进程的上下文恢复到寄存器,这个过程称之为上下文切换。

一般不能有太多上下文切换。

因为处理器每次要刷新寄存器和高速缓存,以便释放空间给新进程,可能导致性能下降。 

2.3中断处理:

中断是优先级最高的任务之一。

通常由 I/O 产生,比如网络接口、键盘、磁盘控制器等。

当一个中断信号到达内核的时候,内核必须从当 前执行的进程切换到一个新的进程,以便处理这个中断。这意味着中断会导致上下文切换。也就是说大量中断会导致性能下降。

注意:在 Linux 当中有两种类型的中断。硬中断和软中断。

硬中断是由硬件产生的,需要快速响应(比如:磁盘 IO 中断、键盘中断、鼠标中断等)

软中断被用来处理可以推迟的任务(TCP/IP、SCSI 协议操作等)。 

2.4进程的属性 

(PID):进程ID,是唯一的数值

(PPID):父进程的 ID

启动进程的用户 ID(UID)和所归属的组(GID)

进程状态:运行 R、休眠 S、僵尸 Z

进程执行的优先级

进程所连接的终端名

进程资源占用:比如占用资源大小(内存、CPU 占用量)

3.ps 命令

常用的参数:

a: 显示跟当前终端关联的所有进程

u: 基于用户的格式显示

x: 显示所有进程,不以终端机来区分

常用的选项组合是 ps -aux  和   ps -axu | grep 关键词

注: 最后一列[xxxx] 使用方括号括起来的进程是内核态的进程,没有括起来的是用户态进程。

上面的参数输出每列含意:

USER: 启劢这些进程的用户

PID: 进程的 ID

%CPU 进程占用的 CPU 百分比;

%MEM 占用内存的百分比;

VSZ:进程占用的虚拟内存大小(单位:KB)

RSS:进程占用的物理内存大小(单位:KB)

STAT:该程序目前的状态,

START:该进程被触发启动的时间;

TIME :该进程实际使用 CPU 运作的时间。

COMMAND:该程序的实际指令

3.1进程的 5 种基本状态 

R :该程序目前正在运作,或者是可被运作;

S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号(signal) 唤醒。

T :该程序目前正在侦测或者是停止了;

Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (僵尸) 程序的状态

D 不可中断状态,通常存在于 I/O 情冴下。比如数据的传输

5 个基本状态后,还可以加一些字母,比如:Ss、R+,

它们含意如下::

<: 表示进程运行在高优先级上

N: 表示进程运行在低优先级上

L: 表示进程有页面锁定在内存中

s: 表示进程是控制进程

l: 表示进程是多线程的

+: 表示当前进程运行在前台

注:

ctrl-c 是发送 SIGINT 信号,终止一个进程

ctrl-z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)

ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销

3.2ps -ef 

-e 显示所有进程

-f 显示完整格式输出

包含的信息如下:

UID: 启动这些进程的用户

PID:进程 ID

PPID: 父进程的进程号

C: 进程生命周期中的 CPU 利用率

STIME: 进程启动时的系统时间

TTY: 表明进程在哪个终端设备上运行。如果显示 ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本 机上 面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。

TIME: 运行进程一共累计占用的 CPU 时间

CMD: 启动的程序名称

4.free 命令

[root@localhost ~]# free -m

total used free shared buff/cache available

Mem: 972 603 69 24 299 123

Swap: 2047 69 1978

其中:

第一行:total 是总内存量,used 是已经使用的内存量,free 是空闲的内存,shared 是多个进程共享的内存总数,buffers 是缓冲内存数,cached 是缓存内存数。默认单位是 KB。

第二行开始:

total 系统中有 972MB 的物理内存,

used 是已经使用的内存数量。

free 是空闲的内存数量。shared 是多个进程共享的内存数量。

buff/cache 用来作为缓冲和缓存的空间,内核会在内存将要耗尽时释放这部分内存给其他进程使用。

availble:可使用空间,评估有多少内存可用于启动新应用程序。

available 字段考虑了页缓存,而不是所有可回收的内存。正因为这个原因所以通常 free+buff/cache 的数值要比 available 的数值大。

第三行为 swap 虚拟内存。

在上面信息中我们可以看到,其实系统上并没有运行什么服务。但是有 299 的 cache,这是因为在实验过程中进行 过多次读写执行等操作。这些文件会被系统暂时缓存下来,以便下次运行的时候能够快速的读取。这种使用都是正 常的情况,说明物理内存正在被合理的使用。但是如果我们发现 swap 区域一直被大量使用,这就说明物理内存不 足。可能需要考虑系统上 swap 使用比例或者添加物理内存

5.uptime 命令

#查看系统负载-top 动态管理进程

 uptime 查看 CPU 负载工具

[root@localhost ~]# uptime

13:22:30 up 20days, 2 users, load average: 0.06, 0.60, 0.48

13:22:30 :                   当前时间

up 20days :                  系统运行时间 ,说明此服务器连续运行 20 天了

2 user :                     当前登陆用户数

load average: 0.06, 0.60, 0.48 :

系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。

如果服务器的 CPU 为 1 核心,则 load average 中的数字 >=3 负载过高,如果服务器的 CPU 为 4 核心,则 load average 中的数字 >=12 负载过高。

经验:单核心,1 分钟的系统平均负载不要超过 3就可以,这是个经验值。

6.top 命令

top 快捷键: 默认 3s 刷新一次,按 s 修改刷新时间

空格 :立即刷新。

q 退出

P:按 CPU 排序

M:按内存排序

T 按时间排序

p: 进程 IP,查看某个进程状态

数字键 1:显示每个内核的 CPU 使用率

u/U:指定显示的用户

h:帮助

如果使用 TOP 动态只查看某个或某些进程的信息 :

第一步:找到进程 ID :ps -axu | grep vim

第二步:用pid查看进程:top -p 9667

7.实战找出系统中使用 CPU 最多的进程 

运行 top , 找出使用 CPU 最多的进程 ,按大写的 P,可以挄按CPU 使用率来排序显示cpu利用率大小不一定百分比越大越高,主要看cpu的数量

第一行内容和 uptime 弹出的信息一样

进程和 CPU 的信息( 第二、三行)

Tasks: 481 total :    进程总数

1 running :           正在运行的进程数

480 sleeping :        睡眠的进程数

0 stopped :           停止的进程数

0 zombie :            僵尸进程数

Cpu(s): 0.0% us :     系统用户进程使用 CPU 百分比。

0.0% sy :             内核中的进程占用 CPU 百分比

0.0% ni :             用户进程空间内改变过优先级的进程占用 CPU 百分比

98.7% id :            空闲 CPU 百分比

0.0% wa :             cpu 等待 I/0 完成的时间总量。

0.0% hi :              硬中断消耗时间 。硬中断,占的 CPU 百分比。1. 硬中断是由硬件产生的,比如,像磁盘,网卡, 键盘,时钟等。

0.0% si :              软中断消耗时间。软中断,占的 CPU 百分比。硬中断是由硬件设备产生,需要快速响应。软中断被 用来处理可以推迟的任务(如 TCP/IP 操作,SCSI 协议)。

0.0 st (steal 偷):   st:虚拟机偷取物理的时间。比如:物理机已经运行了 KVM,XEN 虚拟机。KVM 虚拟机占用物理机 的 cpu 时间内存信息(第四五行)

Mem: 2033552k total : 物理内存总量

340392k used :        使用的物理内存总量

1376636k free :       空闲内存总量

Swap: 2017948k total :交换区总量

0k used :             使用的交换区总量

192772k free :        空闲交换区总量

1518148 avail Mem :   总的可利用内存是多少

注:如果 swap 分区被使用,那么你的内存不够用了。

第 7 行进程信息

PID :       进程 id。

USER :      进程所有者的用户名。

PR :        优先级(由内核动态调整),用户不能修改。

NI :        进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整。

VIRT:       虚拟内存,是迚程正在使用的所有内存(ps 中标为 VSZ)

进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等

假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长100m,而不是实际的使用量

RES:是进程所使用的物理内存。实际实用内存(ps 中标为 RSS)

进程当前使用的内存大小,但不包括 swap out

包含其他进程的共享

如果申请 100m 的内存,实际使用 10m,只增长 10m,与 VIRT 相反

关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR: 共享内存 ,共享内存大小,单位 kb

除 M 了自身进程共享内存,也包括其他进程的共享内存

虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小

计算某个进程所占的物理内存大小公式:RES – SHR

swap out 后,它将会降下来

S :进程状态。

D=不可中断的睡眠状态

R=运行中或可运行

S=睡眠中

T=已停止

Z=僵停

%CPU :上次更新到现在的 CPU 时间占用百分比

%MEM :进程使用的物理内存百分比

TIME+: 进程使用的 CPU 时间总计,单位 1/100 秒

COMMAND :命令名/命令行

8.lsof 命令 

lsof -p 43641 #一般用于查看进程,在读哪些文件

lsof -i :22 #用于查看端口,或查看开启端口是哪个进程在使用

进程的前台与后台运行:

前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这这个进程也随着消失

后台进程: 其中有一类后台进程也叫守护进程。是运行在后台的一种特殊进程,不受终端控制,它不需要终端的交互。

Linux 的大多数服务器就是用守护进程实现的。比如,Web 服务器 httpd 等。

9.kill 关闭进程

格式:kill 进程号  #关闭单个进程

kill -l =====> 列出所有支持的信号

信号编号     信号名

1)        SIGHUP        重新加载配置

2)         SIGINT        键盘中断 crtl+c

3)         SIGQUIT       退出

9)        SIGKILL       强制终止

15)       SIGTERM       终止(正常结束),缺省信号

18)       SIGCONT       继续

19)       SIGSTOP       停止

20)       SIGTSTP       暂停 crtl+z

kill 命令格式如:kill -19 3037

killall 命令 如:killall -i sshd     #交互式杀死 sshd 进程。

pkill 命令:pkill [选项][信号] 进程名

选项: -t 终端号:按照终端号踢出用户。

进程的优先级管理

优先级取值范围为(-20,19),越小优先级越高, 默认优先级是 0

10.nice -n 命令

#指定程序的运行优先级

格式:nice n command

11.renice 命令

#改变程序的运行优先级

格式:renice -n pid

12.screen命令

#使用 screen 后台实时执行命令备份命令

screen -S test -> 新建一个叫 test 的会话

screen -ls -> 列出弼前所有的会话

screen -r test -> 回到 test 会话

实戓场景:公司晚上需要备份大量数据,我在 xshell 上直接执行备份脚本可以吗? 或直接运行脚本 & 放到后台运行可以吗?

当关了 xshell 后,back.sh & 还在后台执行吗?

screen 概述和安装

Screen 中有会话的概念,,用户可以在一个 screen 会话中创建多个 screen 窗口,在每一个 screen 窗口中就像操作一个 真实的 telnet/SSH 连接窗口那样。

安装 screen 软件包

[root@localhost ~]# yum -y install screen

screen 使用方法

直接在命令行键入 screen 命令回车

[root@localhost ~]# screen

screen 将创建一个执行 shell 的全屏窗口。你可以执行任意 shell 程序,就像在 ssh 窗口中那样

例如,我们在做某个大型的操作但是突然之间断开: 

13.使用 screen 后台实时执行命令备份命令 

第一步:[root@localhost ~]# screen #进入

第二步:[root@localhost ~]# vim a.txt #执行命令, 或执行你自己需要运行的备份命令

此时想离开一段时间,但还想让这个命令继续运行

第三步:[root@localhost ~]# #在 screen 当前窗口键入快捷键 Ctrl+a+d

[detached from 44074.pts-3.localhost] #分离出来独立的一个会话

半个小时之后回来了,找到该 screen 会话:

第四步:[root@tivf06 ~]# screen -ls #查看已经建立的会话 ID

There is a screen on:

44074.pts-1.tivf06 (Detached)

1 Socket in /tmp/screens/S-root.重新连接会话:

第五步:[root@localhost ~]# screen -r 44074

[root@localhost ~]# exit #不想使用 screen 会话了,执行:exit 退出。

猜你喜欢

转载自blog.csdn.net/weixin_46659843/article/details/123111029
今日推荐