在 CentOS(以及大多数 Linux 系统) 中,内存并不是“手动分配”的,而是由 内核自动管理。但理解其分配机制和如何查看、优化,对运维和性能调优非常重要。
下面从 内存组成、查看方式、常见分配机制、调优建议 四个方面说明。
Linux 的设计理念是:
尽可能把内存用于缓存和缓冲,提高性能
所以你会看到:
free 很低buff/cache 很高| 类型 | 说明 |
|---|---|
| Used | 真正被进程使用的内存 |
| Buffers | 块设备(磁盘)元数据缓存 |
| Cached | 文件内容缓存 |
| Free | 完全未使用的内存 |
| Slab | 内核对象缓存(dentry、inode) |
| Swap | 当内存不足时使用的磁盘交换区 |
free -h(最常用)free -h
示例:
total used free shared buff/cache available
Mem: 7.8G 2.1G 0.5G 120M 5.2G 5.3G
Swap: 2.0G 0B 2.0G
重点看:
top / htoptop
关注:
RES:进程实际占用内存VIRT:虚拟内存(不真实)SHR:共享内存/proc/meminfo(最底层)cat /proc/meminfo
关键字段:
MemTotal
MemFree
Buffers
Cached
SwapTotal
SwapFree
Slab
✅ 优点:提高 IO 性能
❌ 不用担心它占用太多
swapon -s
| 内存大小 | Swap 建议 |
|---|---|
| ≤ 2G | 2 × 内存 |
| 2–8G | 等于内存 |
| ≥ 8G | 4–8G 即可 |
CentOS 默认允许程序申请超过物理内存的量。
查看:
cat /proc/sys/vm/overcommit_memory
| 值 | 说明 |
|---|---|
| 0 | 启发式(默认) |
| 1 | 总是允许 |
| 2 | 严格限制 |
cat /proc/sys/vm/swappiness
默认通常是 30,可改为 10:
sysctl vm.swappiness=10
永久生效:
echo "vm.swappiness=10" >> /etc/sysctl.conf
sync
echo 3 > /proc/sys/vm/drop_caches
⚠️ 仅调试或紧急情况使用
-Xms4g -Xmx4g
innodb_buffer_pool_size = 60% 内存
| 版本 | 内存管理 |
|---|---|
| CentOS 7 | 传统 sysctl |
| CentOS 8 | 使用 cgroup v2(部分) |
| Stream | 更激进回收策略 |
❌ “free 很少 = 内存不够”
❌ “buff/cache 要手动清”
❌ “swap 一定要关掉”
✅ 正确做法:
available你可以告诉我:
我可以给你 针对性的内存分配和优化方案。