D4 Linux 进程 内存 等命令

D4
  1. 知识点:进程管理,ps、top、htop;kill、pkill;CPU、内存指标识别

  2. 实操:查看所有进程,找出CPU占用最高的进程,模拟杀掉后台进程

  3. 面试题:服务器CPU使用率100%,你怎么排查? 标准答案:先用top定位占用最高的进程PID,查看进程是业务程序还是异常进程,查看程序日志分析死循环、频繁GC等原因。

一、进程基础概念

1.进程定义:操作系统资源分配最小位,拥有独立内存、CPU、文件描述符;线程是调度单位,一个进程可包含多个线程

2.进程状态:

  • R:运行态,正在CPU执行/等待CPU调度
  • S:可中断休眠,等待资源(IO、信号),可被信号唤醒
  • D:不可中断休眠,磁盘IO 阻塞,kill无法杀死
  • Z:僵尸进程,子进程结束父进程未回收,占用PID
  • T:停止态,被Ctrl+z暂停或收到stop信号

3.PID/PPID:进程ID、父进程ID;init/systemd(POID=1)系统一号进程,所有进程祖先

4.前台进程/后台进程

  • 前台:占用中断,Ctrl+c终止
  • 后台:&启动,脱离终端输入,输出仍打印;nohup/screen实现持久后台

5.进程优先级:nice值(-20~19,越小优先级越高),top可查看NI列

二、进程查看工具:ps、top、htop

1.ps静态进程快照(一次性查看)

基础参数

  • ps aux : 展示所有用户全部进程

字段解析

USER :运行用户

PID :进程号

%CPU:CPU占比

%MEM:内存占比

VSZ:虚拟内存

RSS:物理内存

TTY:中断

STAT:进程状态

START:启动时间

TIME:累计CPU运行时间

COMMAND:启动命令

  • ps -ef : 全格式进程树,带PPID 父进程ID
  • ps aux --sort=-%cpu:按CPU占用降序排序,快速找高负载进程
  • ps aux --sort=-%mem:按内存占用降序

拓展过滤用法

  • ps aux |grep 进程名
  • pgrep 进程名:只输出对应PID,配合kill使用
  • ps -T -p PID :查看进程内所有线程(排查多线程CPU爆满)

2.top动态实时监控(系统自带,无需安装)

顶部系统全局指标(CPU / 内存核心识别,重点)

  • 第一行:运行时长,系统负载

load avera:0.00,0.02,0.02 ---- 1/5/15分钟平均活跃进程数

判定:CPU核心数N , 负载持续 > N 代表CPU瓶颈

  • 第二行:进程总览

进程总数、运行、休眠、僵尸、停止进程数量

  • CPU分区(关键排障指标)
    • us: 用户程序CPU占用(业务代码、应用程序,100%瓶颈多在此)
    • sy: 内核态CPU占用(磁盘IO、系统调用、内核异常)
    • id:空闲CPU,id接近0代表CPU打满
    • wa:IO等待CPU,wa高说明磁盘读写瓶颈,不是程序CPU问题
    • hi/si/st:硬中断、软中断、虚拟机偷取时间
  • 第四、五行内存指标
    • 物理内存: 总 , 空闲 , 已使用 ,缓存/缓冲区
    • 拓展:Linux缓存机制,buff/cache会占用大量内存属于正常,可用内存=free+buff/cache
    • Swap:交换分区,swap频繁使用代表物理内存不足,会严重卡顿

进程交互快捷键

  • P :按CPU占用排序;
  • M:按内存占用排序
  • k:输入PID,发送信号杀死进程
  • 1:展开多核CPU,查看单个核心占用
  • z:高亮显示,区分高负载进程
  • q:退出top

3.htop增强版top(需安装)

  • 彩色界面、鼠标操作、进程树展示
  • F5:显示父子进程树,快速定位僵尸进程、多线程程序
  • F9:可视化选择kill信号,无需记信号编号
  • 自带筛选、搜索,直接点击列排序,多核CPU分栏展示

三、进程终止工具:kill、pkill、killall

1.kill原理:发送信号给进程,进程收到信号自主推出(不是强制销毁)

常用信号(拓展)

  • kill -15 PID 默认SIGTERM,优雅终止,允许程序保存日志、释放链接(推荐优先使用)
  • kill -9 PID SIGKILL,强制杀死,无法拦截;丢失缓存数据、数据库连接、文件损坏风险,仅15无效时使用
  • kill -2 PID 等价Ctrl+c,中断前台进程
  • kill -1 PID SIGHUP,重新配置(nginx、java服务常用)

2.pkill:按进程名批量杀进程,无需PID

  • pkill java 杀死所有Java进程
  • pkill -f "python test.py" 匹配完整命令行进程

3.killall:同pkill,按程序名批量终止

4.拓展:nohup后台进程、&后台运行、jobs查看后台任务、fg/bg切换前后台

四、CPU、内存核心指标识别(排障核心)

1.CPU异常指标识别

  • us高:业务代码问题(死循环、无限递归、频繁计算、java频繁FullGC)
  • sy高:大量系统调用、磁盘频繁读写、内核bug、大量创建销毁进程
  • wa高:IO瓶颈(磁盘慢、大量读写日志、数据库慢查询)
  • load持续大于CPU核心数:CPU资源耗尽,请求排队阻塞
  • 单核心100%,多核空闲:单线程程序死循环(程序未做并发)

2.内存异常指标识别

  • used持续上涨,free持续下降:内存泄偶(程序未释放堆内存、缓存无过期清理)
  • Swap频繁使用:物理内存不足,系统频繁交换磁盘,性能暴跌
  • OOM killer:内存耗尽,系统自动杀死占用内存最高进程,查看日志/var/log/messages
相关推荐
JoyCong199812 分钟前
ToDesk个人版、专业版、游戏版、设计版、性能版、团队版权益介绍
大数据·运维·游戏·远程工作·远程操作
ltl36 分钟前
序列化格式深度对比:Protobuf、FlatBuffers、Cap’n Proto
linux
lengjingzju39 分钟前
编译与调试完全指南—第17章 总结
linux
ltl1 小时前
容器网络性能真相:veth vs macvlan vs eBPF 数据面
linux
Elastic 中国社区官方博客2 小时前
ES95:面向 Elasticsearch 时间序列指标的自适应压缩
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
80s7772 小时前
动态ip和静态ip有什么区别
服务器·网络·tcp/ip
mqiqe3 小时前
AgentScope Java 2.0 Agent 状态存储(AgentStateStore)深度解析:构建可恢复、可扩展的智能体运行时
java·运维·网络
mennekes3 小时前
数据中心安全配电设备如何选择?
运维·人工智能·科技·安全·制造
CSDN121103 小时前
麒麟 V10 安装 Node-RED、IEC 104 协议插件及界面汉化
linux·编辑器·vim
开始学AI4 小时前
Codex2API Docker 使用宿主机代理:OAuth Token 兑换 403 问题排查与解决方案
运维·docker·容器