You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL12 walwriter等进程占131GB内存 如何安全释放或强制完成任务

内存占用误解说明

你观测到的walwriter、background writer、checkpointer进程占用131GB内存属于共享内存重复统计,并非进程实际独占的内存资源:

  • 你配置的shared_buffers为128GB,这是PostgreSQL所有进程共用的共享内存段,htop、pg_top等工具统计进程内存时,会将每个进程关联的共享内存段大小计入进程内存,才会出现多个进程均显示占用131GB的情况,实际上这段共享内存全系统仅存储一份
  • 从pg_top的监控数据可以看到,这几个后台进程的实际驻留内存仅4KB~11MB,完全没有占用过量内存,不存在需要清理的内存占用

释放内存用于Nominatim导入的方案

方案1:临时停掉PostgreSQL释放全部共享内存(无运行中业务时推荐)

如果当前没有其他任务需要使用PostgreSQL,直接停止服务即可释放全部128GB的shared_buffers内存,等Nominatim导入完成后再启动服务即可,操作命令:

# 停止PostgreSQL 12主服务
systemctl stop postgresql@12-main
# Nominatim导入完成后执行启动命令
systemctl start postgresql@12-main

操作前可先执行一次手动检查点,将所有内存脏页落盘,避免停止服务时等待过久:

CHECKPOINT;

方案2:保持PostgreSQL运行,临时调小shared_buffers

如果需要持续提供PostgreSQL服务,可以修改PostgreSQL配置文件中的shared_buffers参数,下调到32GB或其他合适值,重启服务后即可释放多余的共享内存,等Nominatim导入完成后再改回128GB即可。

注意事项

  • 绝对不要手动kill walwriter、background writer、checkpointer这几个PostgreSQL核心后台进程,操作会直接触发PostgreSQL实例崩溃,严重时会导致数据损坏
  • 你当前系统有253GB的页缓存,这部分内存由操作系统自动调度,应用申请内存时会优先自动释放,实际可分配给Nominatim的内存远大于当前显示的16GB空闲值
  • 你观测到几个进程处于睡眠状态属于正常情况,说明当前没有待处理的WAL写入、脏页刷盘任务,无需强制触发操作

内容的提问来源于stack exchange,提问作者Paul Toone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 05:03:02