我开发了一个foxx应用程序,它正在机器A上运行。cpu利用率通常低于3-4%,有时达到20%。我有将近600万张唱片。
同一应用程序部署在另一台计算机上(完全复制机器A),数据仅为100 K,但cpu利用率约为200%。
我如何调试这个。机器上正在发生的事情。这两台机器都有相同的应用程序,相同的arangodb版本,相同的配置。磁盘I/O也相同,B机的内存利用率是机器A的1/6。
任何指示。这是在生产环境中发生的,所以对我来说,快速调试它真的很重要。
发布于 2015-08-17 22:04:16
我们终于能够自己重现这样的问题了。我们发现有一种情况,即调度程序线程可能进入某种繁忙的等待状态,导致重复执行以下循环:
epoll_wait()的调度器线程epoll_wait()立即返回,为某个文件描述符发送消息由于没有正确清除监视描述符列表中的一个文件描述符,因此epoll_wait()总是向文件描述符发出一个可用的信号。这使得它几乎立即返回,并且每秒钟执行整个循环多次。这导致了名为scheduler的线程中的CPU峰值。
我们发现其中一个原因是客户端连接超时,而由连接触发的操作仍然在服务器端操作上执行。例如,如果客户端调用服务器路由,该路由需要5秒才能完成和响应,但客户端在3秒后断开连接,则可能发生了这种情况。是什么原因使它很难重现,它并没有影响所有这样的客户关系,但只有一些--哪些还不清楚。
这个特定的问题是在ArangoDB 2.6.5中解决的,所以您可能希望在发布时尝试一下。
https://stackoverflow.com/questions/31416660
复制相似问题