linux – 我怎么知道MongoDB是否需要更多CPU / RAM?

前端之家收集整理的这篇文章主要介绍了linux – 我怎么知道MongoDB是否需要更多CPU / RAM?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一台运行在便宜的 Linux VPS(1 x 2.0GHz cpu和1GB RAM)上的MongoDB服务器.

现在已经有一天了,db.stats()的输出看起来很合理.

db.stats()
{
        "db" : "app","collections" : 11,"objects" : 2067,"avgObjSize" : 238.20416061925496,"dataSize" : 492368,"storageSize" : 1007616,"numExtents" : 18,"indexes" : 9,"indexSize" : 138992,"fileSize" : 16777216,"nsSizeMB" : 16,"dataFileVersion" : {
                "major" : 4,"minor" : 5
        },"extentFreeList" : {
                "num" : 5,"totalSize" : 286720
        },"ok" : 1
}

我可以预测直到超出磁盘空间的天数.

我知道(从FAQs开始)“MongoDB自动使用机器上的所有可用内存作为缓存.”

>我应该如何确定是否需要更多RAM或cpu容量?
>虽然它依赖于应用程序,但RAM或cpu通常更重要吗?
> db.runCommand({serverStatus:1,workingSet:1})返回的是否应该特别注意?

解决方法

How should I determine whether I need more RAM or cpu capacity?

拥有足够的内存非常重要,这样您的索引和数据就可以适应内存以获得良好的性能.如果你的workSet不适合你的内存,你会有很多page faults.当MongoDB需要未加载到物理内存中的数据并且它必须从虚拟内存(即磁盘)读取时,会发生页面错误.
访问磁盘而不是内存会显着降低性能,因为访问磁盘比访问内存中的数据慢几个数量级. SSD磁盘很好,但它们仍然比RAM慢得多.

人们经常忘记开放的连接也需要记忆.在Linux上,每个连接的内存开销大约为10 MB(在旧版本,如v1.8).从v1.9起,根据this JIRA ticket,这个开销被改为大约1MB.因此,如果你有100个开放连接,那将大致转换为1GB(旧版本)和100MB(新版本)的内存使用量(这个数字可以已经改变了最新的MongoDB版本,所以YMMV).您可以在serverStatus命令的输出中检查connections,以查看有关当前/可用连接数的信息.

我建议你阅读MongoDB diagnostics.

Although it’s application dependent,is either RAM or cpu generally more important?

拥有更好的cpu对于cpu密集型任务非常重要,例如:扫描和排序,更新和重新平衡索引,map-reduce,聚合框架命令和服务器端JavaScript.拥有更好的cpu将有助于完成这些任务,但如果您没有足够的内存并且不断从磁盘读取,那么您的性能将会降低.

Is there anything returned by db.runCommand( { serverStatus: 1,workingSet: 1 } ) that I should pay particular attention to?

命令serverStatus是一个非常有用的工具,用于收集有关服务器的统计信息并分析服务器统计信息.

在serverStatus命令的输出中,您应该注意:

> mem包含有关当前内存使用情况的信息(虚拟和物理,即居民)
> workingSet部分包含用于估计工作集大小的值,这是MongoDB主动使用的数据量.
> extra_info – 尤其是page_faults计数器

猜你在找的Linux相关文章