温馨提示×

CentOS内存如何分配

小樊
54
2026-08-19 15:47:15
栏目: 智能运维

CentOS(以及大多数 Linux 系统) 中,内存并不是“手动分配”的,而是由 内核自动管理。但理解其分配机制和如何查看、优化,对运维和性能调优非常重要。

下面从 内存组成、查看方式、常见分配机制、调优建议 四个方面说明。


一、CentOS 内存的基本分配方式

1️⃣ 内存不是“空闲 = 浪费”

Linux 的设计理念是:

尽可能把内存用于缓存和缓冲,提高性能

所以你会看到:

  • free 很低
  • buff/cache 很高
  • 系统其实并不缺内存

二、CentOS 内存的主要组成

1️⃣ 物理内存分布(逻辑上)

类型 说明
Used 真正被进程使用的内存
Buffers 块设备(磁盘)元数据缓存
Cached 文件内容缓存
Free 完全未使用的内存
Slab 内核对象缓存(dentry、inode)
Swap 当内存不足时使用的磁盘交换区

三、如何查看 CentOS 内存分配

✅ 1. 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

重点看:

  • available:系统真正可用内存
  • ❌ 不要只看 free

✅ 2. top / htop

top

关注:

  • RES:进程实际占用内存
  • VIRT:虚拟内存(不真实)
  • SHR:共享内存

✅ 3. /proc/meminfo(最底层)

cat /proc/meminfo

关键字段:

MemTotal
MemFree
Buffers
Cached
SwapTotal
SwapFree
Slab

四、CentOS 内存分配机制(重点)

1️⃣ 页缓存(Page Cache)

  • 文件读写自动缓存
  • 释放条件:内存不足时自动回收

✅ 优点:提高 IO 性能
❌ 不用担心它占用太多


2️⃣ Swap 分配机制

Swap 是什么?

  • 内存不足时的“兜底”
  • 性能比内存慢很多

查看

swapon -s

建议

内存大小 Swap 建议
≤ 2G 2 × 内存
2–8G 等于内存
≥ 8G 4–8G 即可

3️⃣ 内存 overcommit(允许超分配)

CentOS 默认允许程序申请超过物理内存的量。

查看:

cat /proc/sys/vm/overcommit_memory
说明
0 启发式(默认)
1 总是允许
2 严格限制

五、常见内存分配调优(生产环境)

✅ 1. 减少 Swap 使用(提高性能)

cat /proc/sys/vm/swappiness

默认通常是 30,可改为 10

sysctl vm.swappiness=10

永久生效:

echo "vm.swappiness=10" >> /etc/sysctl.conf

✅ 2. 清理缓存(不推荐频繁使用)

sync
echo 3 > /proc/sys/vm/drop_caches

⚠️ 仅调试或紧急情况使用


✅ 3. Java / 数据库内存分配建议

Java

-Xms4g -Xmx4g

MySQL

innodb_buffer_pool_size = 60% 内存

六、CentOS 7 / 8 / Stream 差异

版本 内存管理
CentOS 7 传统 sysctl
CentOS 8 使用 cgroup v2(部分)
Stream 更激进回收策略

七、常见误区

❌ “free 很少 = 内存不够”
❌ “buff/cache 要手动清”
❌ “swap 一定要关掉”

✅ 正确做法:

  • available
  • 看是否有 swap 频繁使用
  • 看 OOM 日志

八、如果你有具体场景

你可以告诉我:

  • ✅ 物理内存多大?
  • ✅ 跑什么服务(Java / MySQL / Nginx / Docker)?
  • ✅ 是 CentOS 7 还是 8 / Stream?
  • ✅ 是否出现 OOM 或卡顿?

我可以给你 针对性的内存分配和优化方案

0