在“1核2G内存”(即 1 核 CPU、2GB 内存)的环境下,MySQL 启动后剩余可用内存取决于多个因素,但我们可以进行一个合理的估算。
一、系统总内存
- 总物理内存:2 GB = 2048 MB
二、操作系统占用
即使是最轻量的 Linux 发行版(如 CentOS minimal、Ubuntu Server 等),系统本身也需要一定内存来运行基础服务(systemd、日志、网络、SSH 等):
- 操作系统基础占用:约 200–400 MB
- 最小化安装可能低至 200MB
- 带一些监控工具或服务可能接近 400MB
三、MySQL 内存占用
MySQL 的内存使用是可配置的,但默认配置通常较为保守。以下是一些主要的内存消耗项:
1. 全局缓冲区(Global Buffers)
innodb_buffer_pool_size:这是最大的一块,默认在旧版本中可能只有 128MB 或 8MB,但在较新版本(如 MySQL 5.7+)中会自动设置为物理内存的 25% 左右。- 在 2GB 环境下,若自动配置,约为:512MB
- 但很多发行版(尤其是云镜像)会限制得更小,比如 128MB~256MB
key_buffer_size:MyISAM 索引缓存,默认一般 8MB 或 16MBquery_cache_size:查询缓存(MySQL 8.0 已移除),默认可能 16–128MB(5.7 及以前)tmp_table_size/max_heap_table_size:内存临时表,各默认 16–64MB- 其他:
innodb_log_buffer_size、binlog_cache_size等,合计几十 MB
2. 每连接内存(Per-thread memory)
- 每个连接会使用:
sort_buffer_size、read_buffer_size、join_buffer_size、thread_stack等- 默认每个连接约 256KB ~ 1MB
- 假设最大连接数为 100,则这部分最多占用:100 × 1MB = 100MB(但实际并发少时远低于此)
四、估算示例(典型场景)
假设:
- 系统最小化安装:占用 300 MB
- MySQL 配置较保守:
innodb_buffer_pool_size = 256M- 其他全局缓冲:100M
- 连接数较少,并发连接 10,每连接 512KB → 约 5MB
- MySQL 总内存 ≈ 360 MB
✅ 启动后可用内存估算:
| 项目 | 内存占用 |
|---|---|
| 操作系统 | 300 MB |
| MySQL 进程 | 360 MB |
| 其他进程(cron、sshd、日志等) | 50 MB |
| 总计已用 | 约 710 MB |
| 总内存 | 2048 MB |
| 剩余可用内存 | 约 1300 – 1350 MB |
⚠️ 注意:Linux 会使用空闲内存做磁盘缓存(cached/buffers),所以
free命令中 “available” 才是真正可用的。即使显示“已用”较多,只要 available > 0,就不算内存不足。
🔍 实际查看方法
登录服务器后运行:
free -h
输出示例:
total used free shared buff/cache available
Mem: 2.0G 700M 900M 10M 400M 1.2G
关注 available 列,它表示启动 MySQL 后还可供新应用使用的内存(约 1.2G~1.3G 是合理的)。
✅ 结论
在 1核2G 环境下,MySQL 启动后:
大约还剩 1.2GB ~ 1.4GB 可用内存(available)
前提是:
- 系统无其他大型服务运行
- MySQL 配置合理(未调大 buffer_pool 到 1G 以上)
- 使用的是 MySQL 5.7/8.0 默认或优化过的配置
📌 建议
- 对于 2G 小内存环境,建议手动优化 MySQL 配置,避免
innodb_buffer_pool_size超过 512MB - 监控
available内存,防止 OOM(内存溢出导致 MySQL 被 kill)
如需,我可以提供一份适用于 2G 内存的 MySQL 优化配置示例。
PHPWP博客