我目前正在开发一项 IMAP 服务,该服务从 Gmail 中提取用户电子邮件的滑动窗口,并将其存储在本地,以提高性能。传输、解码和存储电子邮件是可行的,但是通过 IMAP IDLE 命令空闲的线程在保持活力方面遇到了困难。
怎么了?线程通过运行 rake 任务启动,每个用户一个线程。这工作正常,如果 IMAP IDLE 信号丢失、连接重置或线程死亡,我将重新启动有问题的线程。但是代码似乎会导致内存泄漏或其他原因,从而导致线程饥饿。换句话说,由于没有收到 IMAP IDLE 信号,线程被成功识别为死亡,但是当我尝试重新启动它们时,线程不会自行执行。
更具体地说,内存使用量在几天内从64 MiB 增加到 >300 MiB ,可能导致线程不足。不过,我不确定这一点。在登台机器上使用较少的线程(仅 15 个用户 = 15 个线程,加上 Ruby IMAP 库中的 15 个额外线程)进行调试并计算创建的对象时,只能发现内存使用量的增加可以忽略不计。
因此,我的问题是...... ;)
- 如何正确调试?
- Ruby 是否存在线程饥饿问题?我们也尝试过 JRuby,但无济于事。
- 还有其他人是否遇到过或是否有其他人遇到过类似的问题?