温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

解决PostgreSQL连接不释放的问题

发布时间:2020-07-16 14:41:03 来源:亿速云 阅读:1576 作者:清晨 栏目:编程语言

这篇文章将为大家详细讲解有关解决PostgreSQL连接不释放的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

PostgreSQL连接不释放怎么办

PostgreSQL连接不释放的解决方法如下:

推荐:postgresql教程

方法一:使用kill命令手动杀死进程

kill -s SIGTERM 进程号

方法二:创建脚本,自动杀死进程

使用python脚本监控postgres中超时的僵尸连接并将其释放,将代码保存为pgMonitor.py并添加到linux的corntab中定时执行即可

#coding:utf-8
from db.SqlUtil import *
import psycopg2.extras
from datetime import datetime,timedelta
import time
import os,sys
from subprocess import *

sql_conn=Driver().getConn()
cursor = sql_conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cursor.execute("select * from pg_stat_activity WHERE state='idle'  ORDER BY backend_start")
now=time.time()
for obj in cursor.fetchall():
    t=obj["query_start"]
    spT=now-time.mktime(t.timetuple())
    spTH=spT/3600
    if spTH>5:
        pid=obj["pid"]
        cmd="kill %s" % pid
        Popen(cmd, shell=True, stdout=PIPE)
    
cursor.close()
sql_conn.close()

在数据库postgresql中,一个客户端到服务器连接实际上是一个tcp socket连接,tcp连接是虚连接,一方非正常退出(如断电),另一方会继续维持这个连接,造成死连接。

由于这个连接保留着,且这个transaction还没结束(本来上1秒之内的事务,现在变成至少要2个小时(2个小时后,服务器才可以自动关掉死连接)),所以这个表的锁一直存在着,导致系统的并发性严重降低。

关于解决PostgreSQL连接不释放的问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI