5.4 进程(process)

​ 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。简单的来说就是:一段程序的执行过程。我们将从守护进程、僵尸进程和孤儿进程叙述讲解。

5.4.1 守护进程

作用:

  1. 脱离终端:守护进程在运行时不与任何终端关联,因此它们不能接受来自终端的输入或向终端输出信息。这一特性使得守护进程能够在无人值守的服务器环境中持续运行
  2. 后台运行:守护进程在后台运行,不占用用户的交互会话,因此不会影响用户的其他操作
  3. 持久运行:守护进程通常在系统启动时启动,并一直运行直到系统关闭。它们提供不间断的服务,如文件系统监控、网络服务、打印机队列管理等
  4. 资源管理:守护进程需要妥善管理资源,包括文件描述符、内存分配等,以确保系统资源的高效利用和避免泄露
  5. 错误处理与日志记录:守护进程需要能够处理运行时可能出现的错误,并将相关信息记录到日志文件中,以便于问题的诊断且追踪
5.4.2 僵尸进程

概述:进程因为一些原因脱离系统控制,但是进程又没有正常的退出或是结束,进程运行中不受控制所以会成为僵尸进程。简单的来讲就是父进程创建子进程后,子进程的退出状态不被手机,爹不要它了,就会变成僵尸进程。

处理:一般命令kill,甚至kill -9强制结束进程,一般都会失效。一般解决方法就是去结束僵尸进程的上级进程,主要分为:

  1. 如果僵尸进程的上级进程是守护进程,则只能重启Linux
  2. 如果僵尸进程的上级进程不是主进程(PID = 1),则通过kill命令结束即可

查看:

  • 通过命令查看系统是否有僵尸进程,其中zombie就是系统存在僵尸进程的个数

    top
    Tasks: 151 total, 2 running, 148 sleeping, 1 stopped, 0 zombie
  • 通过命令查看哪个进程是僵尸进程

    ps awx | grep Z
    ps awx | grep "defunct"

排查与结束僵尸进程全流程:

  1. 检查是否有僵尸进程

    top
  2. 查看哪个进程是僵尸进程,并记录PID

    pa aux | grep Z
  3. 查看僵尸进程的上级进程

    pstree -p # 直接看即可
    ps -ef #查看第3列
  4. 如果上级进程不是主进程

    kill [PID]
  5. 检查僵尸进程数量

    top
5.4.3 孤儿进程

概述:父进程如果不等待子进程退出,在子进程之前就结束了自己的“生命”此时的子进程就叫做孤儿进程-->爹么了;Linux避免系统存在过多的孤儿进程,init进程会收留孤儿进程,变成孤儿进程的父进程-->init养父接手;

检查:事前列号你要监控的服务,通过 pstree -pps -ef

解决方法:重启服务

6.0 进程监控指令

6.0.1 ps(报告当前系统的进程状态)
  • ps -ef输出的内容较少
ps -ef 结果 说明
UID 进程属于的用户
PID 进程ID(process id)
PPID 父进程ID (parent id)
TIME 进程占用CPU的时间
CMD 进程名字
  • ps aux输出的内容较多
ps -aux 说明
USER 用户
PID 进程ID
%CPU 进程的CPU使用率
%MEM 进程的内存使用率
STAT 进程的状态
COMMAND 进程名字

案例247. 对进程占用CPU或内存使用率进行排序

# CPU
ps aux | sort -rnk3
# MEM
ps aux | sort -rnk4 # ps内置排序指令
ps aux --sort=-%mem | head # +升序;-降序 pa aux --sort=-%mem --no-heading | head

案例252. 过滤出叫crond的进程或sshd的进程

[root@kylin-ren-class /]# ps -ef | egrep "crond|sshd"
root 835 1 0 08:42 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 1143 835 0 08:44 ? 00:00:00 sshd: root [priv]
root 1165 1143 0 08:44 ? 00:00:00 sshd: root@pts/0
root 3939 1 0 16:04 ? 00:00:00 /usr/sbin/crond -n
root 4713 835 0 18:01 ? 00:00:00 sshd: root [priv]
root 4723 4713 0 18:01 ? 00:00:00 sshd: root@pts/1
root 4899 835 0 18:01 ? 00:00:00 sshd: root [priv]
root 4909 4899 0 18:01 ? 00:00:00 sshd: root@notty
root 5494 4730 0 20:22 pts/1 00:00:00 grep -E --color=auto crond|sshd

案例253. 统计crond进程数量

# crond运行中
[root@kylin-ren-class /]# ps -ef | grep crond | wc -l
2 # crond关闭
[root@kylin-ren-class /]# systemctl stop crond # crond关闭后,grep还有一个进程数所以为1
[root@kylin-ren-class /]# ps -ef | grep crond | wc -l
1 # 精准过滤crond进程数量
[root@kylin-ren-class /]# ps -ef | grep crond | grep -v 'grep' | wc -l
0 # 扩展进阶写法
[root@kylin-ren-class /]# ps -ef | grep '[c]rond' | wc -l
0

案例254. 输出rsyslog进程的PID

[root@kylin-ren-class /]# ps -ef | grep '[r]syslog' | awk '{print $2}'
893
6.0.2 ps aux 结果中的VSZ和RSS区别
1. VSZ和RSS进程占用的内存大小的单位都是KB
2. VSZ:虚拟内存 = 物理内存 + Swap
3. RSS:物理内存 # 物理内存通过 free -h 查看
swap交换分区作用:内存不足的时候临时充当内存
6.0.3 ps aux 结果进程状态(Z、R、S、D、T)
进程状态基础 说明
Z zombie僵尸进程(异常)
R running进程运行中,占用CPU
S sleeping 休眠,没有运行
D 不可中断进程,一般进行IO(读写磁盘)
T 挂起的进程,后台运行且暂停状态

进程状态加BUFF

BUFF组合 说明
R+或S+或D+ 进程前台运行
Ss xxxxs 进程是管理进程(父进程)
R< 或 S< 高优先级进程
RN或SN 低优先级进程
Sl 进程是多线程(进程,线程)

案例248. 给sshd设置为高优先级进程


6.1 后台运行服务

概述:前台运行 的命令,如果远程连接断开,电台的命令就结束了;如果让命令去后台运行,且后台运行的命令一般就不会因为链接断开而结束

方案 说明 应用场景
命令 & 最常用,当前链接结束后会推出 大部分时候
nohup 最常用,比较常用,命令输出保留到一个文件中nohup.out 稳定,记录输出
Ctrl + z 后台挂起(暂停),回到前台运行fg,后台运行bg 较少使用
screen 命令需要安装,screen命令创建虚拟机窗口,命令可以在里面运行 自己研究一下

案例249. 命令后台运行

ping baidu.com &
sleep 99 &

案例250. 使用nohup命令后台运行并把输出写入到文件

# 不指定文件默认写到nohup.out
nohup ping baidu.com & # 指定写入某个文件
nohup ping baidu.com > /tmp/ping.log 2>&1 &

案例251. 在使用yum/apt安装软件卡住了,ctrl + c无法取消(前台)怎么办

# 1.进入后台挂起
yum reinstall tree
ctrl + z # 2.job查看后台的进程
jobs
[root@kylin-ren-class /]# jobs
[1]+ 已停止 yum reinstall tree # 3.通过kill结束
kill %1 #任务序号是1

6.2 top 命令讲解

概述:显示或管理执行中的程序

top命令的快捷键

快捷键 说明
q 退出(quit)
space 立刻更新
p 默认,按照CPU使用率排序
M 按照进程的内存使用率排序
1 显示所有核心的CPU使用情况

top命令参数

参数 说明
-b 显示所有信息,不仅仅显示头部信息和部分的进程信息
-n[数字] 显示几次

案例255. top命令非交互模式与过滤指定内容

[root@kylin-ren-class ren]# top -bn1 | grep 'zombie' | awk '{print $(NF-1)}'
0

案例256. 取出系统登陆用户数量

[root@kylin-ren-class ren]# top -bn1 | awk 'NR==1 ' | awk '{print $(NF-6)}'
2

案例257. 取出僵尸进程数量

[root@kylin-ren-class ren]# top -bn1 | awk 'NR==2{print $(NF-1)}'
0

6.3 系统负载

概述:在单位时间内,系统进程处于可以运行状态(R、S状态)和处于不可中断状态(D磁盘读写)的进程数量

  1. 系统负载:最近1分钟,最近5分钟,最近15分钟的平均值,一般也叫平均负载
  2. 它在Linux中一般用于衡量系统繁忙程度
  3. 可运行CPU、不可中断IO
6.3.1 如何衡量系统负载值高低
  1. 系统负载的值与CPU核心总数比较(lscpu)
  2. 接近于CPU核心总数就表示系统负载有些高
  3. 一般进阶CPU核心总数的60%~70%我们就要警惕,这是阈值

4核心的负载警告范围:2.4~3.2

4核心CPU使用率最多可以达到单个进程400%

6.3.2 系统负载变高常见原因
  1. CPU:
  2. 磁盘IO:
6.3.3 系统负载变高排查流程
流程 细节
1. 通过监控软件发现故障 第3阶段讲解
2. 通过堡垒机连接故障机器,确定是否有故障 w、top、lscpu
3. A. 定位CPU导致还是IO导致 top命令
3. B. top命令的%CPU部分,如果us或sy高,表明CPU占用导致的负载高 top命令查看us和sy
3. C. top命令的%CPU部分,如果wa变高,表示系统进程正在进行读写操作,可能其他进程正在排队导致IO变高 top命令查看wa
4. A. 定位到具体的进程 具体进程具体操作
4. B. 如果是CPU导致,top命令CPU排序,ps、aux过滤排序 iotop命令
4. C. 如果是IO导致,则使用iotop -o iotop命令
5. 找出问题进程,根据进程找出相应服务,查看服务 后续阶段查看2阶段内容
6.3.4 模拟系统负载(压力测试)
# 安装压力测试软件
1.yum install -y stress # 2.模拟CPU导致的负载高
stress --cpu 2 --timeout 1000 # 3.模拟IO导致的系统负载高
stress --io 4 --hdd 4 --hdd-bytes 1g --timeout 10000s

Linux指令详解之:进程与系统负载的更多相关文章

  1. Linux指令详解useradd groupadd passwd chpasswd chage 密码修改

    Linux指令详解useradd groupadd passwd chpasswd chage 密码修改 http://speediness.blog.51cto.com/760841/1783661 ...

  2. Linux 指令详解 alias 设置别名(转)

    我们在使用Linux中使用较长的命令而且要经常要使用时,总是会使用别名,这里就简单的介绍一下别名alias 指令:alias设置指令的别名 语法:#  alias name='command line ...

  3. 轻松学习Linux之详解系统引导过程

    轻松学习Linux之详解系统引导过程-1 轻松学习Linux之详解系统引导过程-2 本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  4. Linux权限详解 命令之 chmod:修改权限

    权限简介 Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功. Linux下文件的权限类型一般包括读,写,执行.对应字母为 r.w.x. Li ...

  5. (转)Linux PS 详解

    原文:https://cn.aliyun.com/jiaocheng/162702.html 摘要:原文地址:http://www.cnblogs.com/wangkangluo1/archive/2 ...

  6. Linux Ptrace 详解

    转 https://blog.csdn.net/u012417380/article/details/60470075 Linux Ptrace 详解 2017年03月05日 18:59:58 阅读数 ...

  7. GCC 指令详解及动态库、静态库的使用

    GCC 指令详解及动态库.静态库的使用 一.GCC 1.1 GCC 介绍 GCC 是 Linux 下的编译工具集,是「GNU Compiler Collection」的缩写,包含 gcc.g++ 等编 ...

  8. Linux 系统结构详解

    Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...

  9. linux syslog详解

    linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置   一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...

  10. #pragma 预处理指令详解

    源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma  预处理指令详解              在所有的预处理指令中, ...

随机推荐

  1. Qt开源作品37-网络中转服务器

    一.前言 用Qt做开发10年了,其中做过好多项目,基于现在web和移动互联网发展如此迅猛,大量的应用场景需要一个网络中转服务器,可以实现手机app或者其他客户端远程回控设备,现在物联网发展非常迅猛,这 ...

  2. C Primer Plus 第6版 第五章 编程练习参考答案

    编译环境VS Code+WSL GCC 源码在文末下载 /*第1题*************************/ #include<stdio.h> #define MIN_TO_H ...

  3. 前端学习openLayers配合vue3(修改地图样式)

    这一块的东西非常简单,基于上一步的继续操作 关键代码,当然对应的对象需要进行相关的引入,为了方便理解,把背景色和边框放在了一起 //填充颜色 style:new Style({ fill:new Fi ...

  4. 【Git】fatal: refusing to merge unrelated histories

    git pull origin master --allow-unrelated-histories

  5. Activiti、Flowable和Camunda选型和对比

    https://camunda.com/https://www.jianshu.com/p/5942c4ee513chttps://zhuanlan.zhihu.com/p/484107368http ...

  6. python的类机制

    python的类机制 参考:python面向对象 概念 方法重写/覆盖:若从父类继承的方法不能满足子类的需求,可以对其进行改写. 类变量:在实例化对象中是公用的,定义在类中,且在函数体之外,通常不作为 ...

  7. String、StringBuffer、StringBuilder三者的异同

    /*String.StringBuffer.StringBuilder三者的异同?String:不可变的字符序列:底层使用char[]存储StringBuffer:可变的字符序列:线程安全的,效率低: ...

  8. oracle 根据节点id递归查询全部的父节点(转载)

    本文转载自   https://blog.csdn.net/BondChenJ/article/details/78581625 1.适用状况:blog 适用树状结构数据,例如包含id,parent_ ...

  9. ORACLE存储过程编程应用实例-门诊药房发药

    最近两个整理了门诊药房发药的业务逻辑,准备通过存储过程实现数据处理.耗费两天时间验证终于完成,对存储过程的了解又深入了一些,总结如下: 1.游标的遍历使用了FOR IN语句进行循环,比FETCH与方便 ...

  10. 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)

    九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) @ 目录 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) 1. RDB 概述 ...