docs(blog): 新增 Linux 内存优化指南并更新工作区侧边栏

This commit is contained in:
liumangmang
2026-03-20 22:20:27 +08:00
parent 87ace8cbe8
commit 89f79774ff
5 changed files with 642 additions and 0 deletions

View File

@@ -0,0 +1,222 @@
---
title: 内存优化完全指南
icon: simple-icons:linuxmint
date: 2026-03-20
category:
- Linux
tag:
- Linux Mint
- 内存优化
- 性能调优
- zram
- earlyoom
---
# Linux Mint 内存优化完全指南
这篇记录一次真实的 Linux Mint 内存优化过程从内存告急、Swap 打满,到切换纯 zram、调整内核策略、加上 OOM 保护,最终把系统稳定性和响应速度拉回到优秀状态。
<!-- more -->
## 一 问题背景
### 1.1 初始状态
排查时的核心数据:
- **物理内存**: 29GB
- **已使用**: 25GB (86%)
- **可用内存**: 3.5GB
- **Swap**: 15GB几乎耗尽
### 1.2 主要问题
| 问题 | 严重程度 | 影响 |
|------|---------|------|
| Swap 完全耗尽 | 🔴 严重 | 系统响应明显变慢 |
| 可用内存过低 | 🔴 严重 | 高负载场景容易卡顿 |
| 长时间残留会话 | 🟡 中等 | 持续吃内存、吃 CPU |
| 文件 Swap | 🟡 中等 | 磁盘 IO 成为瓶颈 |
### 1.3 内存占用分析
常用定位命令:
```bash
# 查看内存概览
free -h
# 查看内存占用 TOP 10 进程
ps aux --sort=-%mem | head -11
```
观察到的主要内存占用:
- IntelliJ IDEA: 约 4.9GB
- VMware 虚拟机: 约 4GB
- 多个 IDE/AI 工具常驻进程
- 多个 OpenCode 会话并行
---
## 二 优化流程
### 2.1 清理僵尸进程
#### 2.1.1 识别僵尸会话
判断标准:
- 进程对应终端显示 `(deleted)`
- 运行时间很长,但无人交互
- `w` / `who` 中找不到对应活跃终端
```bash
# 看会话是否还挂着真实终端
for pid in $(pgrep -f "\.opencode$"); do
echo "=== PID: $pid ==="
ps -p "$pid" -o pid,etime,%cpu,%mem,cmd --no-headers
lsof -p "$pid" 2>/dev/null | grep -E "pts/|tty" | head -3
echo
done
# 优雅终止僵尸会话
kill -15 <PID1> <PID2>
```
清理后,可用内存和 Swap 都会明显回升。
---
### 2.2 从文件 Swap 切换到纯 zram
#### 2.2.1 为什么选 zram
性能差异(体感非常明显):
| 类型 | 速度 | 延迟 | 寿命影响 |
|------|------|------|---------|
| zram | 内存级 | <1ms | 无磁盘写入 |
| 文件 Swap (SSD) | 磁盘级 | 10-100ms | 增加 SSD 写入 |
| 文件 Swap (HDD) | 磁盘级 | 100-1000ms | 响应更慢 |
zram 的关键收益:
- 性能更高:比文件 Swap 快很多
- 压缩率高:常见 3:1 到 4:1
- 磁盘更友好:减少持续写入
#### 2.2.2 检查当前 zram
```bash
zramctl
swapon --show
```
本文案例中,最终将 zram 配到物理内存的 80%,并保留 `zstd` 算法。
---
### 2.3 调整内存策略参数
#### 2.3.1 关键参数
```bash
# 当前策略
sysctl vm.swappiness
sysctl vm.vfs_cache_pressure
```
本文做的策略调整:
- `vm.swappiness=40`(默认 10 偏保守zram 场景下可更积极)
- 保持 `vfs_cache_pressure=100`
#### 2.3.2 增加 OOM 保护
安装并启用 earlyoom避免内存耗尽导致系统“假死”
```bash
sudo apt update
sudo apt install -y earlyoom
sudo systemctl enable --now earlyoom
```
---
## 三 三个脚本(可复用)
为了复盘方便,把这次整理后的脚本放到博客目录:
- `src/programming/linux/Linux_Mint/scripts/setup_zram_only.sh`
- `src/programming/linux/Linux_Mint/scripts/optimize_memory_policy.sh`
- `src/programming/linux/Linux_Mint/scripts/expand_swap.sh`
### 3.1 setup_zram_only.sh
用途:禁用文件 Swap启用纯 zram80%)。
```bash
./src/programming/linux/Linux_Mint/scripts/setup_zram_only.sh
```
### 3.2 optimize_memory_policy.sh
用途:把 swappiness 调到 40并安装 earlyoom。
```bash
./src/programming/linux/Linux_Mint/scripts/optimize_memory_policy.sh
```
### 3.3 expand_swap.sh
用途:保留文件 Swap 的场景下扩容到 24G备用方案
```bash
./src/programming/linux/Linux_Mint/scripts/expand_swap.sh
```
---
## 四 执行顺序建议
推荐顺序:
1. 先做僵尸进程清理(立刻见效)
2. 再切换纯 zram性能提升
3. 最后调策略和 OOM 保护(长期稳定)
---
## 五 验证清单
### 5.1 配置验证
```bash
free -h
swapon --show
zramctl
sysctl vm.swappiness
systemctl is-active earlyoom
```
### 5.2 目标状态
- 可用内存明显提升
- Swap 不再长时间打满
- zram 算法为 `zstd`
- `vm.swappiness=40`
- `earlyoom` 处于 `active`
---
## 六 本次优化结果
本文案例最终状态:
- 内存从高压恢复到健康余量
- Swap 从几乎打满恢复到可控状态
- 系统在多工具并行场景下更稳定
- 交互延迟和卡顿体感明显改善
如果你也是 Linux Mint 开发机、工具常驻多、会话长时间运行,这一套流程可以直接复用。