概述Postgresql:由于目标机器主动拒绝,所以无法build立连接
在Azure中的windows Server 2012 R2上运行Postgresql 9.5
在我的应用程序上运行一些loadtests时,出现无法连接到postgres服务器的错误。 在postgres的日志中,我收到以下消息:
无法从客户端接收数据:由于目标机器主动拒绝,无法build立连接。
只有当loadtest进入下一个场景时,才会发生这种情况,它会触发代码的不同部分。 所以需要新的数据库连接。 但是在10-20秒之后,其余的情况完美无缺,没有任何其他的打嗝。 所以这个问题似乎是TCP连接。 (我的代码重试了几次,但让它重试20秒是不可行的)
embedded式数据库使用外部ODBC访问的build议?
Codeigniter远程数据库连接问题
如何判断是否有任何MysqL连接已被删除或超时?
连接到sql Server 2008 R2 Express时出错
Rails 4数据库连接池错误
我在configuration文件中使用以下设置
postgresql.conf中
Listen_addresses = \’*\’ max_connections = 500 shared_buffers = 1024MB temp_buffers = 2MB work_mem = 2MB maintenance_work_mem = 128MB
的pg_hba.conf
host all all 0.0.0.0/0 trust host all all ::/0 trust
我知道,我知道..接受来自所有人的连接不是保存,但是这只是为了testing的目的,并确保这些设置不会阻止任何连接。 所以这个答案是无效的
我一直在监视服务器上的连接数,在75的负载下稳定。Postgres使用大约350MB的RAM。 所以给定configuration和虚拟机规格(7GB RAM)应该有足够的空间来创build更多的连接。 但是,当下一个场景旋转起来时,连接数量不会增加,它会保持水平,并开始提供有关不能build立连接的日志消息。
这里可能是什么问题?
为什么一个连接不得不打开,而不是填充数据集?
连接到MysqL服务器(localhost)非常慢
MysqLi_real_connect()往往需要5秒左右,即使在开发环境
这听起来像这不是一个真正的Postgres问题(因此没有更改数据库统计数据,你正在检查),而不是流量正在被服务器停止。 可能是因为在处理负载测试查询时,该端口上的流量已饱和?
这听起来不像是你遇到任何Azure资源限制 (包括数据库限制,如果这适用于你的设置?),但没有更多的负载测试细节,很难说明需要什么。
来自网络和其他SO答案的解决方案建议:
禁用TCP autotuning并调整服务器上的TCP / IP注册表项,例如设置TcpAckFrequency – 详细信息请参阅本文
进行TCP设置调整(如WinsockListnBacklog ) – 可能受连接池是否正在使用的影响 – 请参阅MS支持文章 ,该文章适用于sql server 2005,但对排除被拒绝的TCP / IP连接有一些很棒的提示(使用Network监视器,但适用于较新的工具)
如果您有足够的服务器控制权来源,请求处理更快
禁用网络代理(在您的负载测试应用程序中): <defaultProxy> <proxy usesystemdefault=\”False\”/> </defaultProxy> – source
最可能的原因是防火墙/防病毒:
软件/个人防火墙设置
多个软件/个人防火墙
防毒软件
LSP层
(虚拟)路由器固件
目前的Azure基础设施是否包含防火墙或防病毒软件?
此外,在做一些额外的搜索,看起来这是一个标准的windows“连接被拒绝”的消息,这表明Postgresql正试图连接到某些东西,被拒绝。
也有可能,网络中的一个网络元素(假设您仍然连接到服务器)将延迟或丢弃一些数据库登录/认证网络数据包(例如,被认为是伪装的auth.replay)。
出现错误时,您还可以使用数据包分析器(如Wireshark )来记录/检查网络流量。
问候
总结
以上是内存溢出为你收集整理的Postgresql:由于目标机器主动拒绝,所以无法build立连接全部内容,希望文章能够帮你解决Postgresql:由于目标机器主动拒绝,所以无法build立连接所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容