前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Postgresql进程卡住无法退出原因和解决方法

Postgresql进程卡住无法退出原因和解决方法

作者头像
mingjie
发布于 2022-09-23 02:21:21
发布于 2022-09-23 02:21:21
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

前言

Postgresql进程卡住无法退出怎么办?例如以下场景:

  • kill 进程:无效
  • kill -2/-12 进程:无效
  • pg_terminate_backend(pid):无效

1 模拟卡住

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- pg14下测试通过

cd `pg_config --libdir`/postgresql

cat << EOF > loop.c
#include "postgres.h"
#include "fmgr.h"
#include <unistd.h>
PG_MODULE_MAGIC;
PG_FUNCTION_INFO_V1(loop);
Datum loop(PG_FUNCTION_ARGS)
{
    /* an endless loop */
    while(1) 
    {
        // 注意这里没有加:CHECK_FOR_INTERRUPTS();
        sleep(2); 
    }
}
EOF

gcc -I /data01/bin/pg9000/include/postgresql/server -fPIC -shared -o loop.so loop.c

-- psql
CREATE FUNCTION loop() RETURNS void LANGUAGE c AS 'loop';

-- 卡住
postgres=# 
postgres=# select loop();

2 尝试解决失败的方法

psql执行ctrl+c失败

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=# select loop();
^CCancel request sent
^CCancel request sent

kill 失败/kill -2失败/kill -12失败

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kill 11699
$ kill -2 11699
$ kill -12 11699

pg_terminate_backend失败

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=# select pg_cancel_backend(11699);
 pg_cancel_backend 
-------------------
 t
(1 row)

postgres=# select pg_terminate_backend(11699);
 pg_terminate_backend 
----------------------
 t
(1 row)

3 进程在干什么

stracp -p

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ strace -p 11699
Process 11699 attached
restart_syscall(<... resuming interrupted call ...>) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [URG], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], SA_RESTORER|SA_RESTART|SA_NOCLDSTOP, 0x7fbbe4fcc630}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [URG], NULL, 8) = 0
nanosleep({2, 0}, 
0x7fff60c0bb80)       = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [URG], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], SA_RESTORER|SA_RESTART|SA_NOCLDSTOP, 0x7fbbe4fcc630}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [URG], NULL, 8) = 0
nanosleep({2, 0}, 0x7fff60c0bb80)       = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [URG], 8) = 0

gstack

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gstack 11699
#0  0x00007fbbe45a68d0 in __nanosleep_nocancel () from /lib64/libc.so.6
#1  0x00007fbbe45a6784 in sleep () from /lib64/libc.so.6
#2  0x00007fbbe585e145 in loop () from /data01/bin/pg9000/lib/postgresql/loop.so
#3  0x0000000000728b0f in ExecInterpExpr (state=0x2bf0100, econtext=0x2befe00, isnull=0x7fff60c0c037) at execExprInterp.c:725
#4  0x000000000072a965 in ExecInterpExprStillValid (state=0x2bf0100, econtext=0x2befe00, isNull=0x7fff60c0c037) at execExprInterp.c:1824
#5  0x000000000077eec1 in ExecEvalExprSwitchContext (state=0x2bf0100, econtext=0x2befe00, isNull=0x7fff60c0c037) at ../../../src/include/executor/executor.h:339
#6  0x000000000077ef2a in ExecProject (projInfo=0x2bf00f8) at ../../../src/include/executor/executor.h:373
#7  0x000000000077f118 in ExecResult (pstate=0x2befce8) at nodeResult.c:136
#8  0x000000000073eefa in ExecProcNodeFirst (node=0x2befce8) at execProcnode.c:463
#9  0x00000000007338aa in ExecProcNode (node=0x2befce8) at ../../../src/include/executor/executor.h:257
#10 0x0000000000736130 in ExecutePlan (estate=0x2befab0, planstate=0x2befce8, use_parallel_mode=false, operation=CMD_SELECT, sendTuples=true, numberTuples=0, direction=ForwardScanDirection, dest=0x2bee790, execute_once=true) at execMain.c:1551
#11 0x0000000000733f15 in standard_ExecutorRun (queryDesc=0x2b2c850, direction=ForwardScanDirection, count=0, execute_once=true) at execMain.c:361
#12 0x00007fbbe589ac5e in pgss_ExecutorRun (queryDesc=0x2b2c850, direction=ForwardScanDirection, count=0, execute_once=true) at pg_stat_statements.c:1003
#13 0x0000000000733d27 in ExecutorRun (queryDesc=0x2b2c850, direction=ForwardScanDirection, count=0, execute_once=true) at execMain.c:303
#14 0x000000000097cd6d in PortalRunSelect (portal=0x2ba3f90, forward=true, count=0, dest=0x2bee790) at pquery.c:921
#15 0x000000000097ca2c in PortalRun (portal=0x2ba3f90, count=9223372036854775807, isTopLevel=true, run_once=true, dest=0x2bee790, altdest=0x2bee790, qc=0x7fff60c0c4e0) at pquery.c:765
#16 0x00000000009766d3 in exec_simple_query (query_string=0x2b064f0 "select loop();") at postgres.c:1213
#17 0x000000000097abf1 in PostgresMain (argc=1, argv=0x7fff60c0c770, dbname=0x2b32c00 "postgres", username=0x2b32bd8 "mingjiegao") at postgres.c:4494
#18 0x00000000008b6de6 in BackendRun (port=0x2b2b720) at postmaster.c:4530
#19 0x00000000008b6765 in BackendStartup (port=0x2b2b720) at postmaster.c:4252
#20 0x00000000008b2bdd in ServerLoop () at postmaster.c:1745
#21 0x00000000008b24af in PostmasterMain (argc=1, argv=0x2b000e0) at postmaster.c:1417
#22 0x00000000007b4d2b in main (argc=1, argv=0x2b000e0) at main.c:209

4 原因&解决方案

4.1 原因

原因是PG当前堆栈没有进入信号相应处理函数,一般就是进入死等堆栈了:

  • 一般能cacnel的堆栈:超时后检查中断,然后继续sleep
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while
  sleep(timeout)
  CHECK_FOR_INTERRUPTS();
  • 死等堆栈
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while
  sleep()

4.2 解决方案

注意:千万不要kill -9,SIGKILL没有信号处理函数,OS会直接停掉进程;PG父进程发现子进程异常退出,会停掉所有进程,释放共享内存,在重新申请共享内存,拉起所有进程。效果就等于异常重启,启动时肯定会需要时间redo,可能造成几分钟的停止服务。(除非后果可以接受,否则不要kill -9)

执行kill -2或kill -12后或者执行pg_terminate_backend后,主动调用信号处理函数,让PG正常退出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gdb attach 11699
(gdb) p ProcessInterrupts()
[Inferior 1 (process 11699) exited with code 01]
The program being debugged exited while in a function called from GDB.
Evaluation of the expression containing the function
(ProcessInterrupts) will be abandoned.
(gdb) q

服务端效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=# 
postgres=# select loop();
^CCancel request sent
^CCancel request sent

(GDB调用后)

FATAL:  terminating connection due to administrator command
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
postgres=# \q

服务端日志:server没有其他报错、server没有重启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
11699 [local] mingjiegao postgres 2022-08-19 09:41:43 UTC 42723STATEMENT:  CREATE FUNCTION loop() RETURNS void LANGUAGE c AS 'loop';
11699 [local] mingjiegao postgres 2022-08-19 09:42:24 UTC 00000LOG:  statement: select loop();
13083 [local] mingjiegao postgres 2022-08-19 09:45:39 UTC 00000LOG:  statement: select pg_cancel_backend(11699);
13083 [local] mingjiegao postgres 2022-08-19 09:45:47 UTC 00000LOG:  statement: select pg_terminate_backend(11699);
11699 [local] mingjiegao postgres 2022-08-19 09:52:44 UTC 57P01FATAL:  terminating connection due to administrator command
11699 [local] mingjiegao postgres 2022-08-19 09:52:44 UTC 57P01STATEMENT:  select loop();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ilya 官宣新公司,主打“恶意”竞争!先拉不缺钱的技术大佬入伙,不盈利也要赢过 OpenAI !
昨晚,OpenAI 的联合创始人、前首席科学家 Ilya Sutskever 宣布,其正在创办一家专注于安全领域的新人工智能公司 Safe Superintelligence Inc. (SSI)。Sutskever 透露,该公司的目标和产品只有一个:创建安全而强大的人工智能系统。“超级智能触手可及。构建安全的超级智能是我们这个时代最重要的技术问题。”
深度学习与Python
2024/06/27
2240
Ilya 官宣新公司,主打“恶意”竞争!先拉不缺钱的技术大佬入伙,不盈利也要赢过 OpenAI !
OpenAI CEO Sam Altman 离职事件时间线最全盘点
近期,OpenAI 首席执行官 Sam Altman 因被董事会解聘一事引发了全球范围内的高度关注。我们提供了一份详尽的 AI 工具集,收集并整理了自该事件发生以来所有相关报道与新闻,以直观明了的方式为您呈现事件的发展过程。为了让您深入了解整个事件的时间线以及北京时间上的具体处理事宜,我们按照事件的发生和各家英文媒体的公开报道时间进行了有序排列,从而为您提供一个全面且细致入微的理解渠道。如果您对此类事件具有独特之见或观点想法,我们热忱期盼您能莅临下方评论区,将您的宝贵意见及观点分享给广大读者。
程序员朱永胜
2023/11/23
4980
OpenAI CEO Sam Altman 离职事件时间线最全盘点
一封信导致Sam Altman被开除?神秘「Q*」项目曝光,进化令人震惊
OpenAI 的「真还传」剧情昨天迎来了大结局。但今天,事件主角 Sam Altman 又上了热搜。
机器之心
2023/11/24
2670
一封信导致Sam Altman被开除?神秘「Q*」项目曝光,进化令人震惊
Ilya的神秘公司SSI估值将达200亿美元,5个月翻四倍,却没有任何产品
沉寂已久的 Ilya Sutskever 和他的创业公司 SSI 终于有新消息了。
机器之心
2025/02/08
1090
Ilya的神秘公司SSI估值将达200亿美元,5个月翻四倍,却没有任何产品
被开48小时后,「访客」Sam Altman重返OpenAI总部,马斯克呼吁披露真相
自上周六早晨被 OpenAI 开除过去了 48 个小时,Sam Altman 回到了 OpenAI 旧金山总部。不过这次他是以「访客」的身份回公司的。他在 X 上表示,「这是我第一次也是最后一次佩戴访客牌。」
机器之心
2023/11/22
1830
被开48小时后,「访客」Sam Altman重返OpenAI总部,马斯克呼吁披露真相
Altman王者归来!强势要求解散董事会,OpenAI终极宫斗一触即发
现在,Altman已经以胜利者的姿态重返OpenAI探讨自己的去留问题,并且对董事会提出了新的要求——
新智元
2023/11/22
2020
Altman王者归来!强势要求解散董事会,OpenAI终极宫斗一触即发
OpenAI“生死存亡”时刻:95% 员工或将加入微软,原 OpenAI 寻求与竞对合并?
昨天,微软 CEO Satya Nadella 宣布 Sam Altman、Greg Brockman 及其同事将加入微软,但这一决定似乎还未最终敲定。根据外媒 The Verge 的报道,如果让其余董事会成员下台,Sam Altman 和 Greg Brockman 仍然愿意重返 OpenAI 。
深度学习与Python
2023/11/22
1870
OpenAI“生死存亡”时刻:95% 员工或将加入微软,原 OpenAI 寻求与竞对合并?
OpenAI 计划以要约收购的形式出售股票,投资者质疑其盈利能力
作者| 李冬梅 1 OpenAI 被曝就收购要约展开谈判 当地时间 1 月 5 日,据《华尔街日报》报道,有知情人士透露,爆红的聊天机器人 ChatGPT 背后的研究实验室 OpenAI 正在谈判以收购要约的形式出售现有股份,交易对该公司的估值达到 290 亿美元左右,使其在没有什么收入的情况下成为账面上最值钱的美国初创公司之一。 这些知情人士说,风投公司 Thrive Capital 和 Founders Fund 正在商谈投资该笔交易,交易中出售的股票总额至少为 3 亿美元。这些知情人士说,这项交
深度学习与Python
2023/03/29
3780
OpenAI 计划以要约收购的形式出售股票,投资者质疑其盈利能力
[译] 科技初创企业遭遇IPO寒冬
大数据文摘作品,欢迎个人转发朋友圈,自媒体、媒体、机构转载务必申请授权,后台留言“机构名称+转载”,申请过授权的不必再次申请,只要按约定转载即可 翻译:Selene Wang, 田桂英, Wendy
大数据文摘
2018/05/23
3810
下个爆点人形机器人?OpenAI、英伟达、贝索斯向同一家公司投了6.7亿刀
本周五,彭博社援引消息人士的话报道称,亚马逊创始人杰夫・贝索斯、英伟达和其他大型科技公司正在不约而同地投资初创公司 Figure AI,该公司旨在开发人形机器人。
机器之心
2024/02/26
1350
下个爆点人形机器人?OpenAI、英伟达、贝索斯向同一家公司投了6.7亿刀
新火种AI|被迫卖身、CEO下台、高管出走,又一家AI独角兽出事
距离OpenAI政变才刚刚过去不久,又一家AI明星独角兽Stability AI也出事了,而且处境比OpenAI更加严峻。
新火种
2023/12/29
2060
又一场 AI“宫斗”要上演?盈利困难、投资人开撕 CEO,Stable Diffusion 背后公司被曝正寻求收购
当地时间 11 月 29 日,据彭博社报道,Stable Diffusion 图像生成器背后的英国 AI 初创公司 Stability AI 正考虑接受整体收购,理由是投资者对其财务状况不满、并开始向管理层不断施加压力。
深度学习与Python
2023/12/04
2140
又一场 AI“宫斗”要上演?盈利困难、投资人开撕 CEO,Stable Diffusion 背后公司被曝正寻求收购
OpenAI前首席科学家成立新公司SSI;B站开源轻量级 Index-1.9B 系列模型;百奥几何完成PreA轮融资丨每日大事件
6月19日,从中国电信处获悉,中国电信人工智能研究院(TeleAI)联合北京智源人工智能研究院发布了全球首个单体稠密万亿参数语义模型Tele-FLM-1T,成为国内首批发布稠密万亿参数大模型的机构。记者了解到,针对大模型训练算力消耗高的问题,TeleAI与智源基于模型生长和损失预测等关键技术联合研发出的Tele-FLM系列模型,仅使用了业界普通训练方案9%的算力资源,基于112台A800服务器,用时4个月完成了3个模型总计2.3T tokens的训练。
数据猿
2024/06/21
1250
OpenAI前首席科学家成立新公司SSI;B站开源轻量级 Index-1.9B 系列模型;百奥几何完成PreA轮融资丨每日大事件
OpenAI “政变”48小时后:Altman 夺回主导权、回归在即!微软入局、董事会或重组
在经历了紧张的 48 小时候拉锯后,Sam Altman 已经开始与董事会进行最终的谈判。
深度学习与Python
2023/11/22
2300
OpenAI “政变”48小时后:Altman 夺回主导权、回归在即!微软入局、董事会或重组
Open AI 换帅反转?
2023年科技圈年度大戏——OpenAI “政变”正在上演。OpenAI于美国时间11月17日突然宣布解雇CEO山姆·奥特曼。
架构狂人
2023/11/22
3130
Open AI 换帅反转?
优步估值暴涨达1200亿美元!计划明年年初IPO
据知情人士透露,优步科技公司(Uber Technologies Inc.)最近收到了华尔街银行的提议,这些银行对该公司的估值高达1200亿美元,可能会在明年年初进行IPO。
新智元
2018/10/24
3770
优步估值暴涨达1200亿美元!计划明年年初IPO
下一个倒闭的明星创业公司可能就是它!Magic Leap被爆销量惨淡、高管离职、亏损严重
一提到Magic Leap,很多人的脑海里都会浮现出几年前刷屏的一个视频:一只大鲸鱼从篮球场一跃而出,瞬间水花四溅,而围观的同学们传来惊恐的尖叫。
新智元
2019/12/18
3360
亚马逊刚投40亿美元,谷歌等又要投20亿,Anthropic 估值狂飙
据科技新闻网站 The Information 报道,在宣布亚马逊高达 40 亿美元的新投资后不久,人工智能初创公司 Anthropic 正在就 20 亿美元融资进行早期谈判。
机器之心
2023/10/05
2400
亚马逊刚投40亿美元,谷歌等又要投20亿,Anthropic 估值狂飙
OpenAI工程师曝出开发ChatGPT只用8天!长文揭秘谷歌DeepMind等硅谷顶流如何诞生
众所周知,从GPT-2到GPT-3,用了很多年,为什么ChatGPT的诞生却只要8天?
新智元
2023/12/20
2210
OpenAI工程师曝出开发ChatGPT只用8天!长文揭秘谷歌DeepMind等硅谷顶流如何诞生
半年翻3倍,OpenAI最新估值超800亿美元
据《华尔街日报》援引知情人士的消息, OpenAI 正在讨论出售股份的可能性,此举将使该公司的估值达到 800 亿至 900 亿美元。
机器之心
2023/09/28
2280
半年翻3倍,OpenAI最新估值超800亿美元
推荐阅读
Ilya 官宣新公司,主打“恶意”竞争!先拉不缺钱的技术大佬入伙,不盈利也要赢过 OpenAI !
2240
OpenAI CEO Sam Altman 离职事件时间线最全盘点
4980
一封信导致Sam Altman被开除?神秘「Q*」项目曝光,进化令人震惊
2670
Ilya的神秘公司SSI估值将达200亿美元,5个月翻四倍,却没有任何产品
1090
被开48小时后,「访客」Sam Altman重返OpenAI总部,马斯克呼吁披露真相
1830
Altman王者归来!强势要求解散董事会,OpenAI终极宫斗一触即发
2020
OpenAI“生死存亡”时刻:95% 员工或将加入微软,原 OpenAI 寻求与竞对合并?
1870
OpenAI 计划以要约收购的形式出售股票,投资者质疑其盈利能力
3780
[译] 科技初创企业遭遇IPO寒冬
3810
下个爆点人形机器人?OpenAI、英伟达、贝索斯向同一家公司投了6.7亿刀
1350
新火种AI|被迫卖身、CEO下台、高管出走,又一家AI独角兽出事
2060
又一场 AI“宫斗”要上演?盈利困难、投资人开撕 CEO,Stable Diffusion 背后公司被曝正寻求收购
2140
OpenAI前首席科学家成立新公司SSI;B站开源轻量级 Index-1.9B 系列模型;百奥几何完成PreA轮融资丨每日大事件
1250
OpenAI “政变”48小时后:Altman 夺回主导权、回归在即!微软入局、董事会或重组
2300
Open AI 换帅反转?
3130
优步估值暴涨达1200亿美元!计划明年年初IPO
3770
下一个倒闭的明星创业公司可能就是它!Magic Leap被爆销量惨淡、高管离职、亏损严重
3360
亚马逊刚投40亿美元,谷歌等又要投20亿,Anthropic 估值狂飙
2400
OpenAI工程师曝出开发ChatGPT只用8天!长文揭秘谷歌DeepMind等硅谷顶流如何诞生
2210
半年翻3倍,OpenAI最新估值超800亿美元
2280
相关推荐
Ilya 官宣新公司,主打“恶意”竞争!先拉不缺钱的技术大佬入伙,不盈利也要赢过 OpenAI !
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档