温馨提示×

centos为啥崩postgresql

小樊
42
2026-09-24 16:19:26
栏目: 云计算

“CentOS 上 PostgreSQL 崩了”原因有很多种,下面按常见原因 → 排查方法给你一个实用清单,你可以对照看看是哪一种。


一、最常见原因

1. 内存不足(OOM Killer)

CentOS 在内存耗尽时,会杀掉占用内存最多的进程,PostgreSQL 经常中招。

现象

  • PostgreSQL 突然消失
  • 日志中有 killed process
  • dmesg 里有 Out of memory

排查

dmesg | grep -i "killed"
free -h

解决

  • 增加内存 / 交换分区
  • 调小 shared_buffers、work_mem
  • 限制连接数 max_connections

2. 磁盘满了

PostgreSQL 对磁盘非常敏感,写不进 WAL 就会直接挂。

排查

df -h
du -sh /var/lib/pgsql/*

解决

  • 清理日志 / 归档
  • 扩大磁盘
  • 开启 WAL 归档管理

3. PostgreSQL 配置错误

改了 postgresql.conf 或 pg_hba.conf 后启动不了。

常见错误

  • shared_buffers 超过系统内存
  • listen_addresses 写错
  • max_connections 过大

排查

systemctl status postgresql
journalctl -xe

4. 非正常关机 / 断电

CentOS 宕机、强制重启后,PostgreSQL 可能进入恢复模式或直接崩溃。

现象

  • 启动时报 database system was not properly shut down
  • 一直在 recovery

解决

  • 让它自动恢复
  • 严重时用 pg_resetwal(有风险)

5. 文件系统损坏(XFS / ext4)

CentOS 常用 XFS,磁盘异常可能导致 PG 数据文件损坏。

排查

dmesg | grep -i error
fsck(离线)

6. 版本 / 包冲突

  • 混装了 PostgreSQL 官方源和 CentOS 自带源
  • 升级后数据目录不兼容

排查

rpm -qa | grep postgres
which psql

二、快速定位步骤(建议你照做)

# 1. 看服务状态
systemctl status postgresql

# 2. 看系统日志
journalctl -u postgresql

# 3. 看 PG 日志(默认)
/var/lib/pgsql/<版本>/data/log/

# 4. 看内核
dmesg | tail -50

三、你可以直接告诉我这些信息

我可以更精准判断:

  1. CentOS 版本(7 / 8 / Stream)
  2. PostgreSQL 版本
  3. 报错日志(最关键)
  4. 是启动就崩还是运行中崩

如果你愿意,把 PG 日志最后 30 行贴出来,我可以直接帮你判断是哪一种崩法。

0 踩