创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
创新互联是一家从事企业网站建设、成都网站建设、成都做网站、行业门户网站建设、网页设计制作的专业网站制作公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点1000多家。这篇文章将为大家详细讲解有关解决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连接不释放的问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。