在两台独立的计算机上运行相同的应用程序时,Arangodb CPU性能差异

时间:2015-07-14 20:28:04

标签: arangodb

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

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

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

任何指针。这种情况发生在生产环境中,因此对我来说,快速调试它非常重要。

1 个答案:

答案 0 :(得分:1)

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

  1. 调用epoll_wait()
  2. 的调度程序线程
  3. epoll_wait()立即返回,表示某个文件描述符的事件
  4. 调用了正确的事件处理回调,但没有从监视描述符列表中删除文件描述符
  5. 转到1
  6. 由于未从监视描述符列表中正确清除一个文件描述符,epoll_wait()始终发信号通知文件描述符可用的事件。这使它几乎立即返回,并且整个上面的循环每秒执行多次。 这导致名为scheduler的线程中出现CPU峰值。

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

    这个特殊问题已在ArangoDB 2.6.5中修复,因此您可能需要在发布时尝试一下。