Linux基础(进程、性能管理、任务计划)

进程、性能管理和任务计划

什么是进程

  • 进程(Process):运行中的程序的一个实例(或副本),是被载入内存的一个指令集合,是系统资源分配的基本单位。
  • 进程ID(PID):唯一标记各个进程。
  • 权限继承:UID(用户ID)、GID(组ID)和SELinux语境决定进程对文件系统的存取权限,通常从执行进程的用户继承。
  • 生命周期:从创建到终止。

进程创建

  • init/systemd:第一个进程(根进程)。CentOS 7+ 中命名为 systemd
  • 父子关系:进程由其父进程通过 fork() 等机制创建,形成父子关系。
  • Copy-On-Write(COW):优化技术,减少进程创建时的内存使用。
  • 进程资源:内存、栈、文件描述符(fd)。

进程与线程

进程(Process)

  • 定义:具有一定独立功能的程序在数据集上的动态执行过程,是操作系统资源分配和调度的独立单位。
  • 组成
    • 程序:描述进程功能的指令集。
    • 数据集合:程序执行所需的数据和工作区。
    • 进程控制块(PCB):包含进程描述和控制信息,是进程存在的唯一标志。
  • 特征
    • 动态性:临时存在,有生命周期。
    • 并发性:可与其他进程并发执行。
    • 独立性:资源分配和调度的独立单位。
    • 结构性:由程序、数据集合和PCB组成。

线程(Threads)

  • 定义:程序执行流的最小单元,处理器调度和分派的基本单位。
  • 与进程的关系
    • 一个进程包含一个或多个线程。
    • 线程共享进程的内存空间(代码段、数据集、堆等)及进程级资源(如打开的文件)。
  • 线程组成:线程ID、指令指针(PC)、寄存器、堆栈。

进程 vs 线程

特性 进程 线程
资源分配 操作系统分配资源的最小单位 CPU调度的最小单位
组成 包含一个或多个线程 进程中的代码执行路线
内存共享 相互独立 共享进程内存空间
可见性 对其他进程可见 同一进程内线程可见

查看线程信息

  • 线程状态cat /proc/PID/status
  • 二进制文件ll /proc/PID/exe
  • 打开的文件/proc/PID/fd/

/proc 目录详解

路径 描述
/proc/PID/exe 符号链接,指向启动该进程的可执行文件。
/proc/PID/status 包含进程详细状态(PID、PPID、状态、优先级等)。
/proc/PID/fd/ 包含与该进程相关的文件描述符(符号链接形式指向文件或资源)。

并行与并发

  • 并发:轮流执行(单核CPU处理多任务)。
  • 并行:同时执行(多核CPU同时处理任务)。

进程结构

  • 任务队列:内核将进程存放在双向循环链表中,链表项为 task_struct(进程控制块,PCB)。
  • PCB 包含信息
    • 进程ID、用户ID、组ID
    • 程序计数器
    • 进程状态(就绪、运行、阻塞)
    • CPU寄存器值
    • 虚拟地址空间信息
    • 控制终端信息
    • 当前工作目录
    • 文件描述符表
    • 资源使用上限(可通过 ulimit -a 查看)

进程相关概念

内存管理

  • Page Frame:存储页面数据的页框(默认4KB)。
  • MMU:内存管理单元,负责虚拟地址到物理地址的转换。
  • TLB:翻译后备缓冲区,缓存虚拟地址与物理地址的映射关系。

用户与内核空间

  • 用户空间:应用程序运行区域。
  • 内核空间:操作系统核心代码运行区域。

进程内存布局

用途
代码段 存放可执行指令(只读)。
数据段 存放已初始化的全局变量和静态变量。
BSS段 存放未初始化的全局变量(加载时初始化为零)。
堆(Heap) 动态分配的内存(如 malloc 分配)。
栈(Stack) 存放局部变量、函数调用信息(参数、返回地址等)。
队列 先进先出(FIFO)数据结构。

内存问题

问题类型 定义
内存泄漏 程序申请内存后未释放(malloc/new 未配对 free/delete)。
内存溢出 向申请的内存空间写入超过其大小的数据(缓冲区溢出)。
内存不足 程序无法申请到足够内存(OOM)。

Linux 内核参数设置

# 禁止内存过度提交
echo 2 > /proc/sys/vm/overcommit_memory

# 设置物理RAM的过度提交比例(80%)
echo 80 > /proc/sys/vm/overcommit_ratio

# 禁止OOM时重启系统
echo 0 > /proc/sys/vm/panic_on_oom

进程状态

基本状态及转换

  1. 创建状态:申请空白PCB并填写信息。
  2. 就绪状态:已分配资源,等待CPU调度。
  3. 执行状态:正在运行。
  4. 阻塞状态:等待事件(如I/O操作)。
  5. 终止状态:进程结束。
  6. 睡眠态
    • 可中断睡眠(S):可被信号唤醒。
    • 不可中断睡眠(D):等待I/O完成,不可中断。
  7. 停止态:暂停执行(T)。
  8. 僵死态(Zombie):进程已终止,但父进程未回收资源(Z)。

状态转换规则

  • 运行 → 就绪:时间片用完或更高优先级进程抢占。
  • 就绪 → 运行:调度器分配CPU。
  • 运行 → 阻塞:等待事件(如I/O请求)。
  • 阻塞 → 就绪:等待事件发生。
  • 不可能转换:阻塞 → 运行、就绪 → 阻塞。

ps -ef 输出属性

字段 说明
PID 进程ID。
UID 启动进程的用户ID。
PPID 父进程ID。
VSZ 虚拟内存大小(KB)。
RSS 常驻内存集大小(KB)。
STAT 进程状态(R运行、S睡眠、D不可中断睡眠等)。
NI Nice值(优先级调整值)。
PRI 优先级(数值越小优先级越高)。
RTPRIO 实时优先级。
PSR 最后运行的CPU编号。

LRU算法

  • 定义:最近最少使用(Least Recently Used),缓存淘汰策略。
  • 原理:优先淘汰最久未使用的数据。
  • 操作
    • Get:存在则移至链表头部。
    • Put:插入新数据到头部;超容时淘汰尾部数据。
  • 复杂度O(1)(哈希表+双向链表)。
  • 应用场景:页面缓存、图片缓存、数据库查询缓存。

IPC进程间通信

类型 机制
同一主机 管道、共享内存、信号量、消息队列。
不同主机 Socket(IP+端口号)。
远程过程调用 RPC(如gRPC)。

进程优先级

分类

类型 范围 调度算法
实时优先级 0–99 实时调度算法。
普通优先级 100–139 完全公平调度算法。

修改优先级

# 启动时设置Nice值
nice -n 10 command

# 调整运行中进程的Nice值
renice 5 -p PID

进程管理与性能工具

进程树(pstree)

pstree -a -p  # 显示完整命令行和PID

ps命令

ps -elf       # 长格式显示进程信息
ps -eo pid,ni,comm  # 自定义输出字段
ps -aux       # 显示所有用户进程(含无控制终端的进程)

prtstat

prtstat -r PID  # 打印指定进程的统计信息

pgrep/pidof

pgrep -l nginx    # 查找进程并显示名称
pidof nginx       # 查找进程ID

uptime

uptime -p  # 易读格式显示运行时间

mpstat

mpstat -P ALL 1  # 监控所有CPU核心(每秒刷新)

top快捷键

快捷键 功能
P 按CPU使用率排序。
M 按内存使用量排序。
k 终止进程。
r 调整进程优先级。
c 切换显示命令名/完整命令行。

free

free -h  # 人性化显示内存使用

缓冲(Buffer) vs 缓存(Cache)

特性 Buffer Cache
用途 临时存储待写入磁盘的数据。 存储从磁盘读取的数据副本。
目标 优化写入性能(合并I/O)。 加速重复读取。
生命周期 数据写入磁盘后释放。 长期保留直到内存不足。

清除缓存

sync  # 同步数据到磁盘
echo 3 > /proc/sys/vm/drop_caches  # 清除页面/目录项/索引节点缓存

pmap

pmap -x PID  # 查看进程内存映射

vmstat

vmstat 1 5  # 每秒输出1次,共5次

iostat

iostat -x -k  # 扩展统计+KB单位显示

网络监控工具

工具 功能
iftop 实时流量监控(按连接排序)。
nload 简洁的实时带宽监控。
NetHogs 按进程显示网络流量。
iptraf-ng 综合IP流量统计(TCP/UDP/ICMP)。
dstat 多功能资源统计(CPU/内存/磁盘/网络)。

ss命令

ss -t -a  # 显示所有TCP连接

任务计划

at命令(一次性任务)

echo "tar -zcf /backup.tgz /home" | at 02:00  # 凌晨2点备份
atq     # 查看任务
atrm 1  # 删除任务ID=1

cron服务(周期性任务)

crontab -e  # 编辑计划任务

crontab格式

* * * * * command
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 星期 (0–7, 0和7均为周日)
│ │ │ └─── 月 (1–12)
│ │ └───── 日 (1–31)
│ └─────── 时 (0–23)
└───────── 分 (0–59)

特殊字符串

  • @reboot:系统启动时运行。
  • @daily:每天午夜运行。
  • @hourly:每小时运行。
crontab -l  # 查看当前任务
crontab -r  # 删除所有任务
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇