我的 rails 项目中有一个后台工作人员,它在 ruby 中执行大量复杂的内存中数据聚合。我看到一个奇怪的行为。当我启动一个执行作业(数千个)的进程时,我发现随着时间的推移性能出现奇怪的下降。一开始,一个作业完成大约需要 300 毫秒,但在处理了大约 10.000 个作业后,执行时间将逐渐减少到 2000 毫秒左右。这对我来说是一个大问题,我对这怎么可能发生感到困惑。我没有看到内存泄漏(RAM 使用非常稳定),也没有看到任何错误。什么可能导致这种情况偏低,我应该从哪里开始寻找?
背景事实:
- 在这项工作所做的事情中,它对很多字符串进行了大量的正则表达式比较。除了对 redis 实例的读/写操作之外,没有进行外部数据库调用。
- 我试图在不同的服务器/计算机上执行相同的操作,并且症状都是一样的。
- 如果我在开始表现太差时重新启动该过程,则性能会立即再次变好。
- 我正在为作业处理器运行 ruby 1.9.3p194 和 rails 3.2 和 sidekiq 2.9.0