Pre:
celery的worker进程中,报错
1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 106, in connect |
连接超时,无法取得数据.
Debug思路:
1.连接数:
看到报错 could not receive data from server: Connection timed out
一开始觉得是最大连接数的问题.
因为别的正在泡的应用会用pool_size=100
的连接池去连接postgresql
里的某个数据库,
查询最大连接数show max_connections;
最大连接连接数默认才100,那么
pool_size=100
的连接池去连接的话会全部占用了吧…
再继续查询
1 | select max_conn,used,res_for_super,max_conn-used-res_for_super res_for_normal |
实际上,并非连接数被占满了,还是有空余的连接数的.
既然还有剩余的,那我这个应用把连接池的pool_size
改为10
,应该能正常连接上吧.
修改之后,还是报同样的错误不行.
搜索了一下,然后根据这个链接PostgreSQL Connection Timed Out OperationalError on Django and new server
继续排错:
连接超时错误表明无法通过网络上的设置访问数据库服务器,其方式不会立即返回错误。
根据我的经验,最好的方法是分别对连接的两侧进行故障排除。这意味着首先从psql命令行测试连接的服务器端,然后在解析后测试django端。
-
你能从服务器ping服务器吗?如果没有,请从故障排除网络开始
ping 第一个网段的ip 发现会丢包…有点奇怪…
ping另一个网段的ip
不会丢包.难道要用另一个网段的ip来建立数据库连接?
-
你可以使用相同的端口,IP地址等通过psql连接到服务器吗?如果超时,您可能需要检查防火墙和postgresql配置
查看postgre 数据库所在的服务器的防火墙设置.发现也正常.
在客户端写了个简单的脚本,发现也连接正常.
真正的问题:
最终发现.用来连接数据库的内网ip冲突了…
omg…