我想扩大我的基础设施。
有一个使用持久连接的PHP7.4应用程序。
有一个PgBouncer,应用程序连接到默认参数。
/pgbouncer.ini
[databases]
XXXXXXX
[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 4040
unix_socket_dir =
user = postgres
auth_file = /etc/pgbouncer/userlist.txt
auth_type = md5
ignore_startup_parameters = extra_float_digits
logfile = /var/log/pgbouncer/pgbouncer.log
# Log settings
admin_users = postgres以及云环境中的标准PostgreSQL。
我面临一个奇怪的问题,当我用50个用户加载这个应用程序时(我目前正在开发环境中的小型服务器上进行测试),很多人都面临着这个错误:
pg_query(): Query failed: ERROR: query_wait_timeout server closed the connection unexpectedly 事实上,当我在SHOW POOLS中使用PgBouncer时,它显示了什么:
database | user | cl_active | cl_waiting | sv_active | sv_idle | sv_used | sv_tested | sv_login | maxwait | maxwait_us | pool_mode
----------------------+----------------------+-----------+------------+-----------+---------+---------+-----------+----------+---------+------------+-----------
XXXXXXXXXXXXXXXXXXXX | XXXXXXXXXXXXXXXXXXXX | 20 | 31 | 20 | 0 | 0 | 0 | 0 | 120 | 106966 | session
pgbouncer | pgbouncer | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | statement这解释了错误,因为有太多的等待客户端。但有趣的是,在完全相同的时间(在事实中多次确定),我在目标PostgreSQL上运行了以下查询:
SELECT *
FROM pg_stat_activity
ORDER BY pid desc;我看到的是一堆空闲的客户机,有时其中的一个/两个/三个显示为活动的处理查询.!我预计所有20个客户都在为所有等待的PgBouncer客户服务。
(空闲者在10至20秒钟内保持空闲状态,然后再活动)

此外,必须提到的是,所有服务器的CPU为30%,内存为20%,因此,似乎(?)这不是资源问题。
对出了什么问题有什么想法吗?我觉得有些事不正常。
发布于 2020-11-19 11:48:40
问题解决后,看来php的持久连接在PgBouncer中不能很好地工作。只要关闭持久的连接,一切都会顺利进行。:)
https://stackoverflow.com/questions/64898353
复制相似问题