【问题标题】:mongodb high cpu usagemongodb CPU占用率高
【发布时间】:2013-08-04 11:34:06
【问题描述】:

我在 Amazon EC2 上安装了 MongoDB 2.4.4,带有 ubuntu 64 位操作系统和 1.6 GB RAM。

在这台服务器上,只有 MongoDB 没有其他运行。

但有时 CPU 使用率达到 99% 并且平均负载:500.01、400.73、 620.77

我还在服务器上安装了彩信来监控服务器上的情况。

这是彩信详情

根据 MMS 详细信息,索引对每个查询都非常有效。

疑点详情如下

1) HIGH 非映射虚拟内存

2) 高页面错误

谁能帮助我了解导致 CPU 使用率高的确切原因?

编辑:

在@Dylan Tong 的cmets 之后,我减少了活跃的连接,但是 仍然有很高的非映射虚拟内存

【问题讨论】:

  • 您打开了大量的连接。你在执行什么操作?
  • @DylanTong 一般有插入、更新、读取操作。我们使用 MongoDB 作为报告数据库。
  • 大量的活动连接应该可以解释为什么你有这么多未映射的内存。此外,如果您有大约 13k 的活动连接在工作,那么我预计会有很多 CPU 使用率。听起来你的盒子在处理这种类型的负载时并不是很强大。奇怪的是,您的 opcounters 仪表板在可见时间范围内显示的操作很少。预计有 13k 活动连接吗?您有多少个客户端/线程以及配置的连接池大小是多少?您是否正在关闭应用程序中的光标?
  • 另外你有大量页面错误的原因是因为你只有1.6GB。 Unbuntu 最多可能会留给您 1.3G,而您的大型连接堆栈正在用完一大块。因此,常驻内存中的文档数量会减少,从而导致页面错误。
  • 我不熟悉这些驱动程序,但我怀疑您应该在代码中显式调用 cursor.close() (请注意,有一个等效的活动游标 # 作为连接),或者您有一些代码无意中创建了一些极端并发(异步代码?)。后者似乎不太可能,因为您需要大量的客户端和线程来实现 13k。最后,升级到最新的驱动程序可能会有所帮助。可能存在我不知道的驱动程序问题。

标签: ruby-on-rails-3 mongodb amazon-ec2 ubuntu-12.04


【解决方案1】:

以下是一些需要研究的事项的摘要:

1.观察到大量的连接和游标(13k): - 修复:确保您的连接池是合适的。对于报告,以及您当前的请求率,您最多只需要几个连接。另外,我猜你有一个 m1small 实例,这意味着你只有 1 个核心。

2。查看查询和索引: - 使用 explain() 运行您的查询,以观察查询是如何执行的。正确的模型通常会导致查询只提取很少的文档并使用索引。

3。内存(紧凑和预读设置): - 充分利用内存。 1.6GB 太低了。检查您有多少可用内存,并将其与报告的常驻内存进行比较。低常驻内存的几个常见原因是由于碎片。如果有很多文件在移动、大小改变等,你应该运行 compact 命令来整理你的数据文件。此外,糟糕的预读也会导致内存使用不佳。检查您的预读设置 (http://manpages.ubuntu.com/manpages/lucid/man2/readahead.2.html)。尝试一些从低值开始的值 (http://docs.mongodb.org/manual/administration/production-notes/)。生产说明推荐 32(对于标准的 512 字节块)。如果您的文档较大,有时较高的值是最佳选择。希望常驻内存应该接近您的可用内存,并且您的页面错误应该开始减少。

如果您在此之后充分利用资源,但 CPU 仍处于上限,则意味着您需要增加资源。

【讨论】:

  • blockdev --setra (linux.die.net/man/8/blockdev)。我会浏览我发送给您的生产说明链接。那里还有其他设置可以降低磁盘开销并加快 IO。
  • 我不是服务器方面的专家。你为什么不加入我们作为 mongodb 服务器管理员?
  • @GBD 感谢 GBD,但我实际上在 10gen(MongoDB 公司)工作。我喜欢在业余时间帮助 MongoDB 社区。也许您的公司可以从我们的商业支持和咨询中受益。
  • 我很高兴得到 10gen 会员的支持。您知道我们如何设置 MongoDB 性能基准吗?
  • 我们目前正在努力发布一些性能结果,但我们没有正式的性能基准。基准测试很少反映实际的应用程序性能,因为它们无法正确模拟特定的应用程序工作负载。由于显着的设计差异,要正确模拟 NoSQL 的基准特别困难;一项测试很容易使一个系统胜过另一个系统。出于这个原因,工程部门没有花时间专注于基准测试。
猜你喜欢
  • 2018-02-07
  • 1970-01-01
  • 2015-10-29
  • 2016-03-22
  • 2016-04-29
  • 2016-07-29
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
相关资源
最近更新 更多