解释django项目中的pgbouncer日志条目

时间:2016-11-15 12:59:41

标签: django pgbouncer

我在我的Django网络应用中使用pgbouncer。应用程序服务器和数据库服务器是两个独立的VM。 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的许多实例。谁能解释一下这些是什么?也许我做错了什么。从表面上看,我的应用程序似乎到目前为止运行正常。但我需要了解我在日志文件中看到的内容,因此我可以确定它是什么。提前谢谢。

1 个答案:

答案 0 :(得分:1)

  • LOG C - 包含此标头的日志与连接到的客户端相关 pgbouncer(不是postgresql服务器)。
  • LOG S - 是关于 pgbouncer和服务器之间的通信(真正的连接到 posgres服务器)。
  • age=0 - 告诉使用时间,即LOG C age=0, 表示客户端使用连接的时间不到一秒钟。

答案

  

关闭因为:客户关闭请求

无需担心,完全正常。它记录客户端已经很好,即客户端不再有与pgbouncer的实时连接。

通常日志就像

首次尝试连接到pgbouncer

第1行 - 尝试连接到pgbouncer。

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

第3行 - 客户端请求已完成且client-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行 - 客户端请求已完成且client-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 - 完成客户端请求并关闭client-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)。

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

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