2013-08-03 157 views
5

我已经在Amazon EC2上安装了MongoDB 2.4.4,使用Ubuntu 64位操作系统和1.6 GB RAM。mongodb高CPU使用率

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

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

我也安装在服务器MMS监测是怎么回事服务器。

这里是MMS详细enter image description here

按照MMS信息,索引每个查询工作完美。

犯罪嫌疑人的详细信息如下

1)高的非映射虚拟内存

2)高的页面错误

谁能帮我了解究竟是什么导致CPU占用率过高?

编辑:

后@Dylan通的评论,我已经减少了主动connetions但 仍有高非映射虚拟内存

enter image description here

+0

您有大量打开的连接。你在演什么? –

+0

@DylanTong通常有插入,更新,读取操作。我们使用MongoDB来报告数据库。 – GBD

+0

大量的活动连接应该解释为什么你有这么多未映射的内存。另外,如果你有〜13k活动连接做工作,那么我会期望很多的CPU使用率。这听起来不像你的箱子处理这种类型的负载非常强壮。奇怪的是,您的opcounters仪表板在可见的时间段内显示非常少的操作。预计有13K活动连接吗?您有多少个客户端/线程,配置的连接池大小是多少?你在你的应用中关闭你的游标吗? –

回答

4

这里有一个几件事情的总结:

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

2.审议查询和索引: - 与解释(运行查询),观察其查询的执行方式。正确的模型通常会导致查询只提取非常少的文档和使用索引。

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上,那么这意味着您需要增加资源。

+0

如何检查并修改预读设置? – GBD

+0

blockdev --setra <块数>(http://linux.die.net/man/8/blockdev)。我会浏览我发给您的生产笔记链接。还有其他一些设置可以降低磁盘的开销并加速IO。 –

+0

我在服务器方面并不是很专业。你为什么不加入我们作为mongodb服务器管理员? – GBD