Docker部署Prometheus出现WAL加载日志致CPU内存占满服务不可用
Prometheus 高CPU内存占用、持续加载WAL问题解决思路
根因说明
你观察到的WAL segment loaded日志是Prometheus启动时加载预写日志恢复内存数据的过程,持续触发数百条加载记录说明WAL段文件数量过多、体积过大,加载过程会占用极高的CPU和内存资源,加载未完成前服务完全不可用。
具体解决步骤
- 先停止Prometheus容器避免VPS资源耗尽:执行命令
docker stop prometheus - 方案1:不需要保留历史监控数据可直接清理异常WAL
找到Prometheus数据卷的挂载路径,执行命令docker volume inspect prometheus_data查看Mountpoint对应路径,进入该路径下的wal目录,删除所有文件后重启Prometheus即可快速恢复,代价是丢失最近未持久化到块的监控数据。 - 方案2:需要保留历史数据的调整方案
- 先给Prometheus容器添加资源限制,避免占用整机资源,修改docker-compose.yml的prometheus服务配置,新增资源限制段:
services: prometheus: # 原有配置保持不变 deploy: resources: limits: cpus: '4.0' memory: 6G reservations: cpus: '0.5' memory: 1G- 调整Prometheus启动参数优化存储占用,在command配置中新增以下参数:
command: # 原有参数保持不变 - '--storage.tsdb.retention.time=7d' # 按需调整历史数据保留时长,默认15天,调小可降低存储和内存开销 - '--storage.tsdb.wal-compression' # 开启WAL压缩,可降低40%以上WAL体积 - '--storage.tsdb.max-block-duration=2h' # 加快内存数据落盘,减少内存缓存占用- 优化采集配置降低指标量:检查
prometheus.yml中的scrape_configs配置,将采集间隔从默认15s调整为30s或1min,添加metrics_relabel_configs规则丢弃不需要的冗余指标,减少总采集指标数量。
- 所有配置修改完成后,执行命令
docker-compose up -d --force-recreate prometheus重启服务,观察容器日志和资源占用即可。
内容的提问来源于stack exchange,提问作者Roberto Jobet
相关产品推荐
相关产品推荐

