搜索

查找主题、作者或分类。

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 纯净度与泄露检测** [![Website](https://img.shields.io/badge/官网-dnspup.com-2563eb?style=for-the-badge&logo=googlechrome&logoColor=white)](https://dnspup.com/) [![Language](https://img.shields.io/badge/界面-简体中文-16a34a?style=for-the-badge)](https://dnspup.com/) [![IPv6](https://img.@jiuxian · 2026-07-27T05:16:51.387Z
找到 8 条结果