docs(blog): 新增 Linux 内存优化指南并更新工作区侧边栏
This commit is contained in:
222
src/programming/linux/Linux_Mint/内存优化完全指南.md
Executable file
222
src/programming/linux/Linux_Mint/内存优化完全指南.md
Executable 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,启用纯 zram(80%)。
|
||||
|
||||
```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 开发机、工具常驻多、会话长时间运行,这一套流程可以直接复用。
|
||||
Reference in New Issue
Block a user