在高负载条件下,NHibernate有时会在调用BeginTransaction时抛出异常。该消息在Npgsql的RequestConnector方法中包含Timeout while getting a connection from pool
。
在pg_log中:could not receive data from client: No connection could be made because the target machine actively refused it.
Postgres统计数据不显示任何昂贵的查询。
该机器有足够的免费CPU和RAM资源。
版本:Postgres 9.4.0 64位,NHibernate 3.3.1.4000,Npgsql 2.2.3。
Postgres设置:
shared_buffers = 128MB
max_connections = 300
checkpoint_segments = 6
连接字符串设置:
Pooling = true;
MINPOOLSIZE=20;
MAXPOOLSIZE=1000;
Postgres和应用程序位于同一台机器上。
所有NHibernate事务和会话都与using
一起处理。
答案 0 :(得分:1)
此问题是由磁盘瓶颈引起的。使用SSD可以更好地工作。
答案 1 :(得分:0)
答案 2 :(得分:0)
我们注意到类似的问题,我在Npgsql github上发现,他们已经在2.1版本中将DNS解析从同步更改为异步,并导致此错误。 直到今天(版本2.2.4.3)它还没有修复。
这是修复(恢复): Npgsql fork - commit