我有一台运行在便宜的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
}
Run Code Online (Sandbox Code Playgroud)
我可以预测直到超出磁盘空间的天数.
我知道(来自常见问题解答)"MongoDB自动使用机器上的所有可用内存作为缓存."
我该如何确定是否需要更多RAM或CPU容量?
虽然它依赖于应用程序,但RAM或CPU通常更重要吗?
有什么东西归还db.runCommand( { serverStatus: 1, workingSet: 1 } )我应该特别注意吗?
Chr*_*n P 16
我该如何确定是否需要更多RAM或CPU容量?
拥有足够的内存非常重要,这样您的索引和数据就可以适应内存以获得良好的性能.如果您的workSet不适合内存,则会出现很多页面错误.当MongoDB需要未在物理内存中加载的数据且必须从虚拟内存(即磁盘)读取数据时,会发生页面错误.访问磁盘而不是内存会显着降低性能,因为访问磁盘比访问内存中的数据慢几个数量级.SSD磁盘很好,但它们仍然比RAM慢得多.
人们经常忘记开放的连接也需要记忆.在Linux上,每个连接的内存开销大约为10 MB(在旧版本,如v1.8).从v1.9开始,根据这张JIRA票,这个开销被改为大约1MB .因此,如果您有100个打开的连接,那将大致转换为1GB(在较旧版本上)和100MB(在较新版本上)的内存使用量(此数字可能已更改为最新的MongoDB版本,因此YMMV).您可以检查命令输出中的连接,serverStatus以查看有关当前/可用连接数的信息.
我建议您阅读MongoDB诊断程序.
虽然它依赖于应用程序,但RAM或CPU通常更重要吗?
拥有更好的CPU对于CPU密集型任务非常重要,例如:扫描和排序,更新和重新平衡索引,map-reduce,聚合框架命令和服务器端JavaScript.拥有更好的CPU将有助于完成这些任务,但如果您没有足够的内存并且不断从磁盘读取,那么您的性能将会降低.
db.runCommand({serverStatus:1,workingSet:1})返回的是否应该特别注意?
命令serverStatus是一个非常有用的工具,用于收集有关服务器的统计信息并分析服务器统计信息.
在输出serverStatus命令时你应该注意:
| 归档时间: |
|
| 查看次数: |
7249 次 |
| 最近记录: |