Ruby on rails Mongo::EC2中反复出现操作故障,该怎么办?
我在日志中看到很多异常:Ruby on rails Mongo::EC2中反复出现操作故障,该怎么办?,ruby-on-rails,ruby,mongodb,amazon-ec2,mongoid,Ruby On Rails,Ruby,Mongodb,Amazon Ec2,Mongoid,我在日志中看到很多异常: A Mongo::OperationFailure occurred in foo#bar: Mongo::OperationFailure mongo (1.6.2) lib/mongo/util/tcp_socket.rb:76:in `read' 我使用Mongoid作为我的Ruby驱动程序 不确定这是否与连接池有关,但事实上,这是我的mongoid.yml: production: host: xxx port: 27017 username:
A Mongo::OperationFailure occurred in foo#bar:
Mongo::OperationFailure
mongo (1.6.2) lib/mongo/util/tcp_socket.rb:76:in `read'
我使用Mongoid作为我的Ruby驱动程序
不确定这是否与连接池有关,但事实上,这是我的mongoid.yml:
production:
host: xxx
port: 27017
username: xxx
password: xxx
database: foo
logger: false
pool_size: 200
max_retries_on_connection_failure: 5
我知道EC2可能会出现暂时性的网络问题,但这几乎已成为常态。解决这个问题的最好办法是什么
仅作为背景信息,我正在运行JRuby 1.6.7 - 您运行MongoDB的是哪种EC2实例?它们应该至少是一个
m1.large
- 您的MongoDB集群中有多少台服务器?应该至少有2加1个仲裁人。它们是如何配置的李>
- 您是否已将
超时设置为TCP keepalive
- 您是否使用和检查了数据库服务器上的基本统计信息
- 您是否安装并使用了10gen的
- 您运行MongoDB的是哪种EC2实例?它们应该至少是一个
m1.large
- 您的MongoDB集群中有多少台服务器?应该至少有2加1个仲裁人。它们是如何配置的李>
- 您是否已将
超时设置为TCP keepalive
- 您是否使用和检查了数据库服务器上的基本统计信息
- 您是否安装并使用了10gen的
# Connect nonblock is broken in current versions of JRuby
对于lib/mongo/util/tcp_socket.rb中的connect
:
发生错误:
所以这可能是一个EIO/IOError
也许尝试使用Ruby而不是JRuby
希望这有帮助
(如果我不得不做出一个没有受过教育的猜测,我可能会后悔说,那就是因为JRuby必须使用阻塞套接字connect
,而不是非阻塞套接字,EIO/IOError
在read
期间发生了大量的读取/连接。)这可能与以下事实有关:
# Connect nonblock is broken in current versions of JRuby
对于lib/mongo/util/tcp_socket.rb中的connect
:
发生错误:
所以这可能是一个EIO/IOError
也许尝试使用Ruby而不是JRuby
希望这有帮助
(如果我不得不做出一个我可能会后悔说的没有受过教育的猜测,那就是因为JRuby必须使用阻塞套接字connect
而不是非阻塞套接字,EIO/IOError
在read
期间发生了大量的读取/连接。)mongod日志中是否存在警告/错误?能否共享mongostat
的快照?mongod日志中是否存在警告/错误?能否共享mongostat
的快照?
rescue Errno::EINTR, Errno::EIO, IOError
raise OperationFailure
end