自动摘要
正在生成中……
在云服务器资源日益昂贵的今天,很多开发者手中都有 2C1G(2核1GB内存)的“传家宝”机型。在这种环境下运行 MariaDB、OpenLiteSpeed 和多个网络工具(如 Antigravity),内存溢出(OOM)几乎是家常便饭。
本文记录了如何通过 “三层存储架构” 和 “应用层收缩策略”,让一台 1G 内存的服务器稳定跑起 8 个以上的 Docker 容器。
一、 核心思路:构建三层存储体系
在 1G 内存机器上,死守物理内存是不现实的。我们的策略是建立优先级分明的交换体系:
-
物理内存 (RAM):存放最核心的数据库索引和活跃进程。
-
zRAM (高速压缩层):将 600MB 内存虚拟化为压缩 Swap,利用
zstd 算法实现约 3:1 的压缩比,变相获得额外 1GB+ 的可用空间。
-
磁盘 Swap (保命层):保留 2GB 的磁盘文件作为最后防线,防止系统直接崩溃。
1.1 开启 zRAM (Debian 12)
安装 zram-tools 并配置:
# /etc/default/zramswap
ALGO=zstd
SIZE=600
PERCENTAGE=60
PRIORITY=100 # 确保优先级高于磁盘 Swap
1.2 优化磁盘 Swap
将原本可能过大的 Swap 缩减至 2G,并降低内核调用它的倾向:
sudo sysctl vm.swappiness=10
二、 MariaDB:收缩防御策略
MariaDB 是默认配置下的“内存杀手”。在 1G 内存机器上,必须关闭冗余功能。
2.1 关键配置项 (my.cnf)
[mysqld]
# 1. 禁用性能 Schema(重点:直接省下约 100MB)
performance_schema = 0
# 2. 压缩 Buffer Pool
innodb_buffer_pool_size = 128M
innodb_buffer_pool_instances = 1
# 3. 限制连接数与缓冲区
max_connections = 30
sort_buffer_size = 256K
read_buffer_size = 128K
三、 OpenLiteSpeed:精准限流
OpenLiteSpeed (OLS) 的 PHP 处理器(LSPAPI)如果管理不当,会产生大量常驻进程。
3.1 PHP 外部应用优化
在 OLS 后台的 External App 设置中:
-
Max Connections:
8 (严格限制并发进程数)
-
Environment:
-
PHP_LSAPI_CHILDREN=8
-
LSAPI_AVOID_FORK=100M (当可用内存低于 100MB 时,不再强制常驻进程,灵活释放空间)
四、 监控与诊断:揪出隐形成本
在使用过程中,我们发现 antigravity-server 等网络工具产生了多个进程,且大量数据被挤入 Swap。
4.1 使用 smem 代替 top
在多容器环境下,smem 提供的 PSS (Proportional Set Size) 才能反映进程真实的内存占用:
# 查看前 10 个最耗内存的进程
smem -r -k -p | head -n 11
五、 最终优化效果
经过上述调优,系统的 swapon --show 呈现出教科书般的分布:
-
zRAM (PRIO 100): 承载了约 300MB-500MB 的活跃数据,响应极快。
-
磁盘 Swap (PRIO -2): 占用始终保持在 0B,硬盘 I/O 负载显著降低。
总结建议
对于 1G 内存的服务器,优化不是为了消除 Swap,而是为了管理 Swap。 通过 zRAM 消化碎片数据,通过配置参数限制应用上限,2C1G 依然可以拥有非常丝滑的 Web 运行体验。
博主提示:如果你也遇到了 Docker 容器频繁重启的问题,不妨先从 smem 分析开始,再配合 zRAM 进行“空间换时间”的尝试。