MongoDB 的磁盘 IO 高到被 Linode 警告..

2014-07-08 10:19:11 +08:00
 undeflife
我有个网站搭在Linode上,用的MongoDB 2.4.9 ,一天大概6000个PV而已,但是磁盘IO很高,昨天Linode给发了abuse ticket说我IO已经高到影响到邻居了 ,MongoDB的设置基本都是默认的,请问怎么解决这个问题
10733 次点击
所在节点    MongoDB
34 条回复
notnumb
2014-07-08 10:27:04 +08:00
linode没有用cgroup限制么? 还是没用cfq
那lz用cfq和cgroup吧。
openroc
2014-07-08 10:32:47 +08:00
+ redius 减少磁盘IO
skybr
2014-07-08 10:38:17 +08:00
mongo疯吃IO就是内存太小, 装不下热数据, 要再redis不是OOM, 就是mongo让出部分内存, 自己对IO吃得更厉害, 这是往死里做啊.
kslr
2014-07-08 10:40:33 +08:00
碰到过,原因就是内存不够用,解决办法只有加内存。
undeflife
2014-07-08 10:41:07 +08:00
@notnumb 使用cgroup这样去限制不会影响网站的速度吗?我是希望能从应用的层面来处理,比如通过iotop观察到一次查询瞬时300M/s的disk read 这是我的文档结构设计得不合理吗?
undeflife
2014-07-08 10:44:09 +08:00
@skybr
@kslr
- -# 除了加内存就没有别的活路了啊?
wecoders
2014-07-08 10:45:41 +08:00
@undeflife 换mysql
missdeer
2014-07-08 10:50:54 +08:00
@skybr
@undeflife
@wecoders
话说,你们在技术选型的时候是怎么决定用mysql还是用mongodb的?
wecoders
2014-07-08 11:00:03 +08:00
@missdeer 用你搞得定的技术;以及前期的成本考虑;
jungledrum
2014-07-08 11:02:24 +08:00
你确定是mongodb导致的嘛
notnumb
2014-07-08 11:16:19 +08:00
@missdeer 单机mongo意义不大吧,还不如很多包装的leveldb或者mysql或者Elasticsearch
undeflife
2014-07-08 11:38:48 +08:00
@jungledrum iotop活动前三都是mongodb的进程
kslr
2014-07-08 12:08:52 +08:00
@undeflife 暂未找到。
msg7086
2014-07-08 12:37:36 +08:00
一天6000PV,平均每分钟4.2PV,这能把linode的IO跑成abuse,不容易吧?
shiny
2014-07-08 12:52:12 +08:00
比如沒有正确添加索引都会出现这种状况。
另外 Linode 的警告只是提醒下你,你可以修改其上限的。
shiny
2014-07-08 12:55:31 +08:00
看错了,abuse ticket确实有点夸张了。

估计是数据库结构或者用法不正确。MongoDB 要正确使用其实很有难度。
undeflife
2014-07-08 14:09:44 +08:00
@msg7086
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time
1 4 *0 *0 0 1|0 0 7.95g 16.1g 2.82g 1046 site:0.1% 0 0|0 1|0 4k 3k 17 14:06:33

mapped 近8G vsize 16G
4G的vps 而mongodb的数据文件也已经涨到8G了,按楼上的回复 应该是内存不足导致的.
tonyluj
2014-07-08 14:18:26 +08:00
@msg7086 PV貌似不是这么算的,有的时间人很多,有的时候基本没人
一般很大部分都集中在某几个小时里面

确实需要+内存了
msg7086
2014-07-08 14:22:32 +08:00
我不太清楚你的程序有多大的查询量,也不太清楚mongodb的运行性能到底如何,不过我这跑的论坛,12G的MySQL配合memcache热备,用20刀的机器就能轻松顶下来了,一天200万pv。

而且之前搜索的时候也的确看到有人抱怨说mongodb的内存缓存需要等预热时间,否则会死很惨,不知道有没有关系。

另外推荐改善一下架构,能走缓存的就不要撞数据库了。如果nosql的索引做不好的话,还是回到RDBMS的世界来比较好,毕竟是非常成熟的架构。
msg7086
2014-07-08 16:13:43 +08:00
@tonyluj 对于大部分应用,一小时6000pv都不是什么很大的量,每秒2个而已。纯SSD+E5-2680v2要是每秒2个pv都应付不下来,肯定是有什么问题了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/121493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX