Arangodb CPU 性能差异,而 运行 2 台不同机器上的相同应用程序

Arangodb CPU Performance differences while running the same application on 2 separate machine

我开发了一个 foxx 应用程序,它在机器 A 上 运行。cpu 利用率通常低于 3-4%,有时会飙升至 20%。我有将近 600 万条记录。

相同的应用程序部署在另一台机器上(机器 A 的精确副本)并且只有大约 100k 的数据,但是 cpu 利用率约为 200%。

我该如何调试它。机器 B 上发生了什么。两台机器具有相同的应用程序、相同的 arangodb 版本、相同的配置。磁盘I/O也是一样,机器B的内存使用率是机器A的1/6。

任何指针。这是在生产环境中发生的,所以快速调试它对我来说非常重要。

我们终于能够自己重现这样的问题。我们发现有一种情况,调度程序线程可能会进入一些繁忙的等待状态,导致以下循环一遍又一遍地执行:

  1. 调度程序线程调用 epoll_wait()
  2. epoll_wait() return立即发送,为某个文件描述符发出事件信号
  3. 正在调用正确的事件处理回调,但没有从监视描述符列表中删除文件描述符
  4. 转到 1

由于未从监视描述符列表中正确清除一个文件描述符,epoll_wait() 始终发出一个事件信号,要求文件描述符可用。这使得它几乎立即 return ,并且整个上面的循环每秒执行多次。 这导致名为 scheduler 的线程出现 CPU 峰值。

我们发现一个原因是客户端连接超时,而连接触发的操作仍在服务器端操作上执行。例如,如果客户端调用服务器路由需要 5 秒才能完成并响应,但客户端在 3 秒后断开连接,则可能发生了这种情况。 是什么让它难以重现,因为它不会影响所有此类客户端连接,但只会影响一些 - 哪些仍然不清楚。

此问题已在 ArangoDB 2.6.5 中修复,因此您可能想在发布时尝试一下。