有时我们的Postgres数据库崩溃,并且只能通过重新启动服务器来解决。我们尝试增加最大连接数和Django的CONN_MAX_AGE
。另外,我正在尝试学习如何设置PgBouncer。但是,我相信根本的问题必须是其他可以解决的问题。
我正试图找出问题所在。问题是我不知道从哪里开始看什么。以下是一些信息:
错误始终为OperationalError: FATAL: remaining connection slots are reserved for non-replication superuser connections
和OperationalError: could not write to hash-join temporary file: No space left on device
。我认为这是由于打开过多的数据库连接引起的,但我从未设法及时解决此问题,因此我可以检查pg_stat_activity
并查看实际的活动连接。
查看错误日志,大部分情况下会显示相同的URL。我已经检查了nginx日志,它在许多不同的行中列出,这意味着该请求一次被发出多次,而不是Django多次记录相同的错误。所有这些请求均以499 Client Closed Request响应。除了该URL,当然还有其他尝试访问我们网站的用户的请求。
我应该提到,当请求有问题的URL时,服务器处理的逻辑非常简单,我看不到任何可导致数据库崩溃的可疑事件。但是,由于某种原因,页面在生产中的加载速度很慢。
我知道这很模糊并且很少使用,但是我不习惯于sysadmin,我只在大学学习过这种东西,到目前为止,我只是以开发人员的身份工作。