大家好,我目前正在生产中运行sidekiq,但是在一定时间内,这么多作业都会输入错误RuntimeError: Too many open files
的重试队列。正在使用外部API进入retries
的那些作业。当我重新启动sidekiq capistrano
时,它再次起作用。我查了一下:
当前打开的文件(
by using command lsof | wc -l
):71088最多打开文件(
by using command cat /proc/sys/fs/file-max
):400511
所以很明显,这个错误的罪魁祸首不是由我的应用程序在生产服务器(nginx ubuntu)中命中其文件描述符引起的。然后有人说罪魁祸首来自redis连接。然后我通过使用命令来测试创建一对密钥,redis中的值:
`2.2.1 :001 > REDIS = Redis.new(:host => 'localhost', :port => 6379)`
`=> #< Redis client v3.0.2 for redis://localhost:6379/0>`
`2.2.1 :002 > REDIS.set("hello", "goodbye")`
`=> "OK"`
问题是当我通过capistrano命令(cap production deploy
)重新启动我的应用程序时,没有再次出现此类错误,首先我怀疑它是由redis
连接引起的,但事实并非如此。然后我怀疑我是由它的文件描述符引起的,但事实并非如此。你能帮助我找到这个错误的罪魁祸首吗?谢谢你们