Linux指令详解之:进程与系统负载
5.4 进程(process)
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。简单的来说就是:一段程序的执行过程。我们将从守护进程、僵尸进程和孤儿进程叙述讲解。
5.4.1 守护进程
作用:
- 脱离终端:守护进程在运行时不与任何终端关联,因此它们不能接受来自终端的输入或向终端输出信息。这一特性使得守护进程能够在无人值守的服务器环境中持续运行
- 后台运行:守护进程在后台运行,不占用用户的交互会话,因此不会影响用户的其他操作
- 持久运行:守护进程通常在系统启动时启动,并一直运行直到系统关闭。它们提供不间断的服务,如文件系统监控、网络服务、打印机队列管理等
- 资源管理:守护进程需要妥善管理资源,包括文件描述符、内存分配等,以确保系统资源的高效利用和避免泄露
- 错误处理与日志记录:守护进程需要能够处理运行时可能出现的错误,并将相关信息记录到日志文件中,以便于问题的诊断且追踪
5.4.2 僵尸进程
概述:进程因为一些原因脱离系统控制,但是进程又没有正常的退出或是结束,进程运行中不受控制所以会成为僵尸进程。简单的来讲就是父进程创建子进程后,子进程的退出状态不被手机,爹不要它了,就会变成僵尸进程。
处理:一般命令kill,甚至
kill -9
强制结束进程,一般都会失效。一般解决方法就是去结束僵尸进程的上级进程,主要分为:
- 如果僵尸进程的上级进程是守护进程,则只能重启Linux
- 如果僵尸进程的上级进程不是主进程(PID = 1),则通过kill命令结束即可
查看:
通过命令查看系统是否有僵尸进程,其中zombie就是系统存在僵尸进程的个数
top
Tasks: 151 total, 2 running, 148 sleeping, 1 stopped, 0 zombie
通过命令查看哪个进程是僵尸进程
ps awx | grep Z
ps awx | grep "defunct"
排查与结束僵尸进程全流程:
检查是否有僵尸进程
top
查看哪个进程是僵尸进程,并记录PID
pa aux | grep Z
查看僵尸进程的上级进程
pstree -p # 直接看即可
ps -ef #查看第3列
如果上级进程不是主进程
kill [PID]
检查僵尸进程数量
top
5.4.3 孤儿进程
概述:父进程如果不等待子进程退出,在子进程之前就结束了自己的“生命”此时的子进程就叫做孤儿进程-->爹么了;Linux避免系统存在过多的孤儿进程,init进程会收留孤儿进程,变成孤儿进程的父进程-->init养父接手;
检查:事前列号你要监控的服务,通过
pstree -p
或ps -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分钟,最近5分钟,最近15分钟的平均值,一般也叫平均负载
- 它在Linux中一般用于衡量系统繁忙程度
- 可运行CPU、不可中断IO
6.3.1 如何衡量系统负载值高低
- 系统负载的值与CPU核心总数比较(lscpu)
- 接近于CPU核心总数就表示系统负载有些高
- 一般进阶CPU核心总数的60%~70%我们就要警惕,这是阈值
4核心的负载警告范围:2.4~3.2
4核心CPU使用率最多可以达到单个进程400%
6.3.2 系统负载变高常见原因
- CPU:
- 磁盘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指令详解之:进程与系统负载的更多相关文章
- Linux指令详解useradd groupadd passwd chpasswd chage 密码修改
Linux指令详解useradd groupadd passwd chpasswd chage 密码修改 http://speediness.blog.51cto.com/760841/1783661 ...
- Linux 指令详解 alias 设置别名(转)
我们在使用Linux中使用较长的命令而且要经常要使用时,总是会使用别名,这里就简单的介绍一下别名alias 指令:alias设置指令的别名 语法:# alias name='command line ...
- 轻松学习Linux之详解系统引导过程
轻松学习Linux之详解系统引导过程-1 轻松学习Linux之详解系统引导过程-2 本文出自 "李晨光原创技术博客" 博客,谢绝转载!
- Linux权限详解 命令之 chmod:修改权限
权限简介 Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功. Linux下文件的权限类型一般包括读,写,执行.对应字母为 r.w.x. Li ...
- (转)Linux PS 详解
原文:https://cn.aliyun.com/jiaocheng/162702.html 摘要:原文地址:http://www.cnblogs.com/wangkangluo1/archive/2 ...
- Linux Ptrace 详解
转 https://blog.csdn.net/u012417380/article/details/60470075 Linux Ptrace 详解 2017年03月05日 18:59:58 阅读数 ...
- GCC 指令详解及动态库、静态库的使用
GCC 指令详解及动态库.静态库的使用 一.GCC 1.1 GCC 介绍 GCC 是 Linux 下的编译工具集,是「GNU Compiler Collection」的缩写,包含 gcc.g++ 等编 ...
- Linux 系统结构详解
Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...
- linux syslog详解
linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置 一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...
- #pragma 预处理指令详解
源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma 预处理指令详解 在所有的预处理指令中, ...
随机推荐
- Qt开源作品37-网络中转服务器
一.前言 用Qt做开发10年了,其中做过好多项目,基于现在web和移动互联网发展如此迅猛,大量的应用场景需要一个网络中转服务器,可以实现手机app或者其他客户端远程回控设备,现在物联网发展非常迅猛,这 ...
- C Primer Plus 第6版 第五章 编程练习参考答案
编译环境VS Code+WSL GCC 源码在文末下载 /*第1题*************************/ #include<stdio.h> #define MIN_TO_H ...
- 前端学习openLayers配合vue3(修改地图样式)
这一块的东西非常简单,基于上一步的继续操作 关键代码,当然对应的对象需要进行相关的引入,为了方便理解,把背景色和边框放在了一起 //填充颜色 style:new Style({ fill:new Fi ...
- 【Git】fatal: refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories
- Activiti、Flowable和Camunda选型和对比
https://camunda.com/https://www.jianshu.com/p/5942c4ee513chttps://zhuanlan.zhihu.com/p/484107368http ...
- python的类机制
python的类机制 参考:python面向对象 概念 方法重写/覆盖:若从父类继承的方法不能满足子类的需求,可以对其进行改写. 类变量:在实例化对象中是公用的,定义在类中,且在函数体之外,通常不作为 ...
- String、StringBuffer、StringBuilder三者的异同
/*String.StringBuffer.StringBuilder三者的异同?String:不可变的字符序列:底层使用char[]存储StringBuffer:可变的字符序列:线程安全的,效率低: ...
- oracle 根据节点id递归查询全部的父节点(转载)
本文转载自 https://blog.csdn.net/BondChenJ/article/details/78581625 1.适用状况:blog 适用树状结构数据,例如包含id,parent_ ...
- ORACLE存储过程编程应用实例-门诊药房发药
最近两个整理了门诊药房发药的业务逻辑,准备通过存储过程实现数据处理.耗费两天时间验证终于完成,对存储过程的了解又深入了一些,总结如下: 1.游标的遍历使用了FOR IN语句进行循环,比FETCH与方便 ...
- 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)
九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) @ 目录 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) 1. RDB 概述 ...