【问题标题】:explaining pgbouncer log entries in django project解释 django 项目中的 pgbouncer 日志条目
【发布时间】:2016-11-15 12:59:41
【问题描述】:

我在我的 Django 网络应用程序中使用pgbouncer。应用服务器和数据库服务器是两个独立的虚拟机。 pgbouncer 安装在应用服务器上。 pgbouncer.ini 中的相关设置为:

[databases]
dbname = host=80.211.128.113 port=5432 dbname=dbname

pool_mode = transaction
max_client_conn = 250
default_pool_size = 100

pgbouncer接手后,我查了pgbouncer.log,发现很多条目如下:

2016-11-15 12:26:27.514 582 LOG S-0x1192740: dbname/myuser@80.211.128.113:5432 new connection to server
2016-11-15 12:26:27.517 582 LOG C-0x11afcb8: dbname/myuser@127.0.0.1:42262 login attempt: db=dbname user=myuser
2016-11-15 12:26:27.523 582 LOG S-0x1192a10: dbname/myuser@80.211.128.113:5432 new connection to server
2016-11-15 12:26:27.528 582 LOG C-0x11af880: dbname/myuser@127.0.0.1:42250 closing because: client close request (age=0)
2016-11-15 12:26:27.528 582 LOG S-0x1191a98: dbname/myuser@80.211.128.113:5432 closing because: unclean server (age=0)
2016-11-15 12:26:27.548 582 LOG C-0x11afb50: dbname/myuser@127.0.0.1:42258 closing because: client close request (age=0)
2016-11-15 12:26:27.556 582 LOG C-0x11aff88: dbname/myuser@127.0.0.1:42256 closing because: client close request (age=0)
2016-11-15 12:26:27.556 582 LOG S-0x1191c00: dbname/myuser@80.211.128.113:5432 closing because: unclean server (age=0)
2016-11-15 12:26:27.564 582 LOG C-0x11aff88: dbname/myuser@127.0.0.1:42264 login attempt: db=dbname user=myuser
2016-11-15 12:26:27.569 582 LOG C-0x11afb50: dbname/myuser@127.0.0.1:42265 login attempt: db=dbname user=myuser
2016-11-15 12:26:27.570 582 LOG S-0x1191c00: dbname/myuser@80.211.128.113:5432 new connection to server
2016-11-15 12:26:27.593 582 LOG C-0x11af448: dbname/myuser@127.0.0.1:42255 closing because: client close request (age=0)
2016-11-15 12:26:27.593 582 LOG C-0x11afcb8: dbname/myuser@127.0.0.1:42262 closing because: client close request (age=0)
2016-11-15 12:26:27.593 582 LOG S-0x1191c00: dbname/myuser@80.211.128.113:5432 closing because: unclean server (age=0)
2016-11-15 12:26:27.597 582 LOG C-0x11afb50: dbname/myuser@127.0.0.1:42265 closing because: client close request (age=0)
2016-11-15 12:26:27.603 582 LOG C-0x11afb50: dbname/myuser@127.0.0.1:42267 login attempt: db=dbname user=myuser
2016-11-15 12:26:27.604 582 LOG C-0x11afcb8: dbname/myuser@127.0.0.1:42268 login attempt: db=dbname user=myuser

如果仔细分析,可以在日志文件中找到许多 closing because: unclean serverclosing because: client close request 的实例。谁能解释这些是什么?也许我做错了什么。从表面上看,到目前为止,我的应用程序似乎运行正常。但我需要了解我在日志文件中看到的内容,以便确定是什么。提前致谢。

【问题讨论】:

    标签: django pgbouncer


    【解决方案1】:
    • LOG C - 带有此标头的日志与连接到的客户端相关 pgbouncer(不是 postgresql 服务器)。
    • LOG S - 关于 pgbouncer 和服务器之间的通信(真正的连接到 posgres 服务器)。
    • age=0 - 告诉使用时间,即 LOG Cage=0, 表示客户端使用连接的时间不到一秒。

    答案

    关闭因为:客户端关闭请求

    没什么好担心的,完全正常。它记录客户端已经相当,即客户端不再有与 pgbouncer 的实时连接。

    日志通常是这样的

    第一次尝试连接到 pgbouncer

    第 1 行 - 尝试连接到 pgbouncer。

    第 2 行 - pgbouncer 尝试连接到 postgresql 服务器。

    第 3 行 - 客户端请求已完成,客户端-pgbouncer 连接已关闭

    2016-11-15 12:26:27.517 582 LOG C-0x11afcb8: dbname/myuser@127.0.0.1:42262 login attempt: db=dbname user=myuser
    2016-11-15 12:26:27.523 582 LOG S-0x1192a10: dbname/myuser@80.211.128.113:5432 new connection to server
    2016-11-15 12:26:27.528 582 LOG C-0x11af880: dbname/myuser@127.0.0.1:42250 closing because: client close request (age=0)
    

    第 1 行 - 新客户端尝试连接 pgbouncer。它将重新使用已打开的与 postgresql 服务器的连接(为最后一个客户端打开)

    第 2 行 - 客户端请求已完成,客户端-pgbouncer 连接已关闭

    2016-11-15 12:26:27.569 582 LOG C-0x11afb50: dbname/myuser@127.0.0.1:42265 login attempt: db=dbname user=myuser
    2016-11-15 12:26:27.593 582 LOG C-0x11af448: dbname/myuser@127.0.0.1:42255 closing because: client close request (age=0)
    

    第 1 行和第 2 行 - 2 个并发客户端尝试连接到 pgbouncer

    第 3 行 - pgbouncer 为第二个客户端尝试与 postgresql 服务器进行第二次连接(第一个将重新使用已经打开的客户端)

    第 4 行和第 5 行 - 客户端请求已完成,客户端-pgbouncer 连接已关闭

    2016-11-15 12:26:27.564 582 LOG C-0x11aff88: dbname/myuser@127.0.0.1:42264 login attempt: db=dbname user=myuser
    2016-11-15 12:26:27.569 582 LOG C-0x11afb50: dbname/myuser@127.0.0.1:42265 login attempt: db=dbname user=myuser
    2016-11-15 12:26:27.570 582 LOG S-0x1191c00: dbname/myuser@80.211.128.113:5432 new connection to server
    2016-11-15 12:26:27.593 582 LOG C-0x11af448: dbname/myuser@127.0.0.1:42255 closing because: client close request (age=0)
    2016-11-15 12:26:27.593 582 LOG C-0x11afcb8: dbname/myuser@127.0.0.1:42262 closing because: client close request (age=0)
    

    关闭是因为:服务器不干净

    可能是一个问题,因为 pgbouncer 似乎正在获取并关闭与 postgres 服务器的新连接,每个新客户端都连接到它(pgbouncer)。

    可能的解决方案/way-out - 可能与Django works by default 的方式有关。

    与普通池一样,pgbouncer 不能关闭它与 postgres 服务器的连接(在关闭客户端连接时) - 当连接可能达到 server_lifetimeserver_idle_timeout 空闲时,您可能会收到此服务器连接关闭消息/日志,否则不。


    【讨论】:

    • 感谢您的深入回复。我超过 95% 的日志条目都有 age=0client close request。你觉得这正常吗?
    • Yh, pgbouncer log anywhere ' 会充满这一行,如上所述,它会在每次登录尝试后出现(客户端连接到 pgbouncer)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2017-01-05
    • 2016-08-02
    • 2012-08-05
    • 2015-12-08
    相关资源
    最近更新 更多