postgres Roadmap

PostgreSQL 排障专题

PostgreSQL 排障专题:聚合 connection refused、listen_addresses 配置、pg_hba.conf 认证失败、Docker 端口映射不通、连接数耗尽和锁等待等 PostgreSQL 运维问题的完整排障路径与命令模板。

PostgreSQL 排障先区分 TCP 连接层(服务未启动/端口/监听地址/防火墙)和认证层(pg_hba.conf),connection refused 是 TCP 层面连不上,pg_hba.conf 的 reject 是认证拒绝,两者排查方向不同。

postgrespostgresqldatabaseconnectionpg_hbasql
排障 / 命令6
精选入口4
工具 / 速查2
最近更新2026-07-12

Troubleshooting Path

推荐排障路线图

提交问题 →
  1. 01

    先确认服务状态和端口监听

    用 systemctl status postgresql 确认服务 running,用 ss -lntp 确认 5432 端口在监听,区分监听 127.0.0.1 还是 0.0.0.0。

  2. 02

    再检查 listen_addresses 配置

    postgresql.conf 的 listen_addresses = 'localhost' 只监听 127.0.0.1,远程连接全部被拒绝,改为 '*' 需配合 pg_hba.conf 和防火墙。

  3. 03

    继续验证网络路径

    从客户端机器 psql -h <ip> -p 5432 测试连通性,Docker 中注意端口映射写法和自定义 bridge 网络的使用,pg_hba.conf 只影响认证不影响 TCP 连接。

  4. 04

    最后排查认证和连接数

    pg_hba.conf 的 reject 规则返回认证错误而非 connection refused,用 SELECT * FROM pg_stat_activity 看连接数,配合 PgBouncer 做连接池。

Before You Change

执行前检查

  • 生产环境把 listen_addresses 设为内网 IP,配合 pg_hba.conf 限制来源 IP 段,不要用 0.0.0.0
  • Docker 部署用 docker-compose 自定义网络让应用容器用服务名连接
  • pg_hba.conf 的 reject 和 Connection refused 是不同层面的问题,不要混淆
  • 监控 PostgreSQL 连接数和拒绝连接日志,配置 max_connections 和 PgBouncer

Start Here

优先阅读

Latest Updates

最近更新

All Runbooks

全部相关内容

排障

MySQL Lock wait timeout exceeded 排查

MySQL 报 Lock wait timeout exceeded; try restarting transaction 时,用 SHOW ENGINE INNODB STATUS 看 LATEST DETECTED DEADLOCK,通过 information_schema.innodb_trx 与 data_lock_waits 找 blocking 事务,短期 kill 会话,长期缩短事务并补索引避免大范围锁。

mysqllocktransaction
排障

MySQL Too many connections 排查与缓解

MySQL 报 Too many connections、连接数达到 max_connections 时,SHOW PROCESSLIST 按用户/IP/数据库/状态聚合连接,识别大量 Sleep 或长时间 Sending data 的会话,检查应用连接池 max pool size 是否超过数据库承载,而不是盲目调大 max_connections。

mysqldatabaseconnections
排障

PostgreSQL connection refused 排查方法

psql 连接 PostgreSQL 报 could not connect to server: Connection refused 时,先确认服务是否 running、5432 是否监听、postgresql.conf 的 listen_addresses 是否绑定到目标 IP,再逐层排查防火墙、安全组和 Docker 端口映射,pg_hba.conf 只影响后续认证。

postgresqldatabaseconnection
排障

Redis 连接不上怎么排查

Redis 客户端报 Could not connect: Connection refused 或 NOAUTH Authentication required 时,先确认 6379 端口是否监听、redis.conf 的 bind 是否限制为 127.0.0.1、protected-mode 是否阻止远程访问,再核对 requirepass 密码和 Docker 端口映射与容器网络。

redisconnectionbind
排障

Redis 内存占用过高与淘汰策略排查

Redis 内存持续上涨、报 OOM command not allowed when used memory > 'maxmemory' 或 evicted_keys 飙升时,先用 INFO memory 看 used_memory/maxmemory,CONFIG GET maxmemory-policy 确认策略是否 noeviction,再用 --bigkeys 找大 key 并检查 TTL 是否缺失。

redismemorybigkeys
命令

MySQL 查看锁等待和事务命令

MySQL 排查锁等待和事务阻塞的常用命令,SHOW FULL PROCESSLIST 看当前活跃会话与状态,SHOW ENGINE INNODB STATUS 读 LATEST DETECTED DEADLOCK,information_schema.innodb_trx 和 performance_schema.data_lock_waits 找 blocking 事务,必要时 KILL <thread_id>。

mysqllockinnodb