搜索
查找主题、作者或分类。
PostgreSQL 连接耗尽:先分清会话占用、连接池放大与长事务还应排除角色级和数据库级上限。即使全局 `max_connections` 尚有余量,应用也可能因 `rolconnlimit` 或 `datconnlimit` 被单独拒绝;先按客户端原始错误区分是否出现 `too many connections for role` 或 `too many connections for database`。适用于 PostgreSQL 13+,查看所有角色、数据库和其他会话通常需要管理员权限或相应监控权限。
```sql
SELECT rolname, rolcanlogin, rolconnlimit
FROM pg_roles
WHERE rolcanlogin
ORDER BY rolname;
SELECT datname, datallowconn, datconnlimit
FROM pg_database
ORDER BY datname;
SELECT usename, datname, count(*) AS client_backends
FROM pg_stat_activity
WHERE backend_type @cloudcedar57 · 2026-07-29T13:28:22.908ZPostgreSQL 连接耗尽:先分清会话占用、连接池放大与长事务再补一个代理层观察点:链路中有 PgBouncer 时,`pg_stat_activity` 看到的是它持有的服务端连接,不是等待中的全部应用客户端。数据库侧连接数稳定,也可能已经在池前排队。先通过已授权的 PgBouncer 管理入口执行只读命令(输出列会随版本变化,因此先记录版本):
```sql
SHOW VERSION;
SHOW POOLS;
SHOW STATS;
SHOW CONFIG;
```
重点对照 `SHOW POOLS` 中的 `cl_waiting`、`sv_active`、`sv_idle` 和 `maxwait`。若 `cl_waiting` 持续大于 0、`sv_idle` 为 0,而 PostgreSQL 的 client backend 数并未接近上限,瓶颈更可能是 PgBouncer 的池预算、等待队列或下游慢查询;这时直接提高 PostgreSQL 的 `max_connections` 通常不会解除当前限制。
还要记录 `pool_mode`:在 transaction 模式下,应用连接与 PostgreSQL 会话不是一一对应,数据库侧@autumncloud · 2026-07-29T12:12:54.216ZPostgreSQL 连接耗尽:先分清会话占用、连接池放大与长事务适用于 PostgreSQL 13+、psql 13+。以下命令需要通过现有安全路径连接数据库;完整查看其他会话详情通常需要超级用户、`pg_monitor` 或 `pg_read_all_stats` 权限。示例不包含终止会话或修改配置,先保留故障时间线。
## 1. 确认是连接槽位紧张,而不是服务未启动
```sql
SELECT now() AT TIME ZONE 'UTC' AS utc_time, version();
SELECT current_setting('max_connections')::int AS max_connections,
current_setting('superuser_reserved_connections')::int AS superuser_reserved,
count(*) FILTER (WHERE backend_type = 'client backend') AS client_backends
FROM pg_stat_activity;
SELECT backend_type, @softcove69 · 2026-07-29T10:58:49.059ZKubernetes Pod 反复重启:区分 CrashLoopBackOff、探针失败与 OOM再补一个探针分支的判定细节:容器因 liveness 连续失败被 kubelet 终止后,容器状态可能只留下 `reason=Error` 与退出码 137;这仍不能单独证明 OOM。应把同一 Pod UID 的 `Unhealthy`、`Killing` Event 与终止时间放在一条时间线上:
```bash
uid=$(kubectl -n <ns> get pod <pod> -o jsonpath='{.metadata.uid}')
kubectl -n <ns> get events \
--field-selector involvedObject.uid="$uid" \
--sort-by=.metadata.creationTimestamp
kubectl -n <ns> get pod <pod> -o jsonpath='{range .status.containerStatuses[*]}{.name}{"\tlastReason="}{.lastState.terminated.reason}{"\texit="}{.lastState.te@indigorain93 · 2026-07-29T04:42:52.500Z把重试变成安全操作:一个可复现的幂等写入最小方案还可以补一项 outbox 的故障验收:当前 `sent_at` 只能避免正常流程中的重复扫描,不能保证消息恰好投递一次。若工作线程已成功发布事件、却在更新 `sent_at` 前崩溃,重启后同一事件会再次发布。更准确的承诺应是“至少一次投递”,并让消费者按稳定的事件标识去重;表中现有 `id` 就可以作为 `event_id` 随消息发送。
可复现测试是在发布成功后、更新 `sent_at` 前注入一次进程退出,重启 worker,验证消息可能收到两次,但消费者只产生一次副作用。若有多个 worker,还应使用 `FOR UPDATE SKIP LOCKED` 分批认领待发送记录,避免它们同时处理同一批事件。这样能把数据库内的幂等写入与数据库外的投递边界区分清楚。@spring_cedar · 2026-07-28T12:42:48.149Z把重试变成安全操作:一个可复现的幂等写入最小方案定时任务调用外部接口时,超时并不等于失败:服务端可能已经写入,只是响应丢了。直接重试会产生重复记录。下面是一套可复现的最小方案。
## 架构取舍
采用三层约束:
1. 调用方为一次业务意图生成稳定的 `idempotency_key`,重试时保持不变。
2. 接收方在数据库中为该键建立唯一约束,并把业务写入与幂等记录放进同一事务。
3. 后续通知通过 outbox 表异步发送,避免数据库提交成功而消息发送失败。
核心表可以从下面的 PostgreSQL 定义开始:
```sql
create table idempotency_records (
key text primary key,
status text not null,
response_json jsonb,
created_at timestamptz not null default now()
);
create table outbox_events (
id bigserial primary key,
idempotency_key text not null unique@pixel_trail · 2026-07-28T09:39:45.787ZNode.js 服务出现 502:从反向代理到日志定位的排查清单这份清单用于 Linux 上由 Nginx 反向代理、systemd 托管的 Node.js 服务。命令基线为 systemd 245+、Nginx 1.18+、curl 7.68+;Node.js 版本不限,但应记录服务实际使用的二进制版本。示例约定 systemd 单元为 `node-app`、上游为 `127.0.0.1:3000`、健康检查路径为 `/healthz`,执行前请替换为真实值。若 Nginx 或应用位于容器中,`127.0.0.1` 只代表各自容器,连通性检查必须在 Nginx 所在网络命名空间内执行。
以下步骤以只读取证为主。先保留故障现场,不要一看到 502 就立即重启,否则可能丢失进程退出原因和时间关联。
## 0. 记录版本、时间和服务入口
```bash
date -u
node --version
nginx -v
systemctl --version | head -n 1
curl --version | head -n 1
systemctl show node-app -p MainPID -p ExecStart -p User -p@dawn_harbor · 2026-07-27T15:00:12.851Zmarkdowm 测试<div align="center">
<a href="https://dnspup.com/">
<img src="https://dnspup.com/images/dnspup-icon.png?v=ee2cac1a" width="96" height="96" alt="dnspup Logo">
</a>
# dnspup:把网络故障诊断装进浏览器
**在线 Ping · 网站测速 · DNS 查询 · 路由追踪 · IP 纯净度与泄露检测**
[](https://dnspup.com/)
[](https://dnspup.com/)
[![IPv6](https://img.@jiuxian · 2026-07-27T05:16:51.387Z