近期有个很奇怪的需求,因某台服务器的内存闲置过久会被通知回收或降配,除非“用起来”,那既然真实“用不起来”,那就安全但邪恶地占用起来吧,以下是我与 AI 沟通出来的一个法子(有待长时间观察效果)。

第一步:准备工作

安装好 Python3

第二步:创建程序

创建一个可运行的 Python 程序,例如命名 memhold.py
填入内容,保存

#!/usr/bin/env python3

SIZE_GB = 10      # 根据服务器调整,计划占用的内存大小

buf = bytearray(SIZE_GB * 1024 * 1024 * 1024)

# 每页写一次,确保真正分配物理内存
for i in range(0, len(buf), 4096):
    buf[i] = 1

print("memory allocated")

import time
while True:
    time.sleep(600)

第三步:设置后台及开机启动

创建 service 文件

/etc/systemd/system/memhold.service

填入内容,保存

[Unit]
Description=Memory Holder

[Service]
Type=simple
ExecStart=/usr/bin/nice -n 19 /usr/bin/python3 /opt/memhold.py
Restart=always
OOMScoreAdjust=900

[Install]
WantedBy=multi-user.target

配置加载与开机启动

systemctl daemon-reload
systemctl enable --now memhold

如需停止与移除开机启动

systemctl stop memhold
systemctl disenable memhold

部分解释:
OOMScoreAdjust=900:设置为最容易被 OOM Killer 回收,当系统真的发生内存不足时,这个"保内存"程序会优先被终止,而不是你的业务服务。


最后:测试效果

  • 通过 topfree -m 等命令查看内存占用情况。
  • 也可直接用 top -p $(pgrep -f memhold.py | paste -sd,) 查看 memhold 进程的运行情况。
  • 此时也可观察 CPU 是无变化的,因为以上方式并未让 CPU 活跃起来,有需要的可以让 AI 协助增加点 CPU 活跃度。

完结,撒花。