1
notnumb 2014-07-08 10:27:04 +08:00
linode没有用cgroup限制么? 还是没用cfq
那lz用cfq和cgroup吧。 |
2
openroc 2014-07-08 10:32:47 +08:00
+ redius 减少磁盘IO
|
3
skybr 2014-07-08 10:38:17 +08:00 1
mongo疯吃IO就是内存太小, 装不下热数据, 要再redis不是OOM, 就是mongo让出部分内存, 自己对IO吃得更厉害, 这是往死里做啊.
|
4
kslr 2014-07-08 10:40:33 +08:00 1
碰到过,原因就是内存不够用,解决办法只有加内存。
|
5
undeflife OP @notnumb 使用cgroup这样去限制不会影响网站的速度吗?我是希望能从应用的层面来处理,比如通过iotop观察到一次查询瞬时300M/s的disk read 这是我的文档结构设计得不合理吗?
|
8
missdeer 2014-07-08 10:50:54 +08:00
|
10
jungledrum 2014-07-08 11:02:24 +08:00
你确定是mongodb导致的嘛
|
12
undeflife OP @jungledrum iotop活动前三都是mongodb的进程
|
14
msg7086 2014-07-08 12:37:36 +08:00
一天6000PV,平均每分钟4.2PV,这能把linode的IO跑成abuse,不容易吧?
|
15
shiny 2014-07-08 12:52:12 +08:00
比如沒有正确添加索引都会出现这种状况。
另外 Linode 的警告只是提醒下你,你可以修改其上限的。 |
16
shiny 2014-07-08 12:55:31 +08:00
看错了,abuse ticket确实有点夸张了。
估计是数据库结构或者用法不正确。MongoDB 要正确使用其实很有难度。 |
17
undeflife OP @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了,按楼上的回复 应该是内存不足导致的. |
19
msg7086 2014-07-08 14:22:32 +08:00 2
我不太清楚你的程序有多大的查询量,也不太清楚mongodb的运行性能到底如何,不过我这跑的论坛,12G的MySQL配合memcache热备,用20刀的机器就能轻松顶下来了,一天200万pv。
而且之前搜索的时候也的确看到有人抱怨说mongodb的内存缓存需要等预热时间,否则会死很惨,不知道有没有关系。 另外推荐改善一下架构,能走缓存的就不要撞数据库了。如果nosql的索引做不好的话,还是回到RDBMS的世界来比较好,毕竟是非常成熟的架构。 |
20
msg7086 2014-07-08 16:13:43 +08:00
@tonyluj 对于大部分应用,一小时6000pv都不是什么很大的量,每秒2个而已。纯SSD+E5-2680v2要是每秒2个pv都应付不下来,肯定是有什么问题了。
|
21
undeflife OP @msg7086 考虑迁到postgreSQL上去,这样部分数据结构的问题可以使用PostgreSQL的json字段的特性解决,只不过这个需要开发时间,我现在需要解决掉这个高IO的问题,还不知道我如果持续不解决,Linode会怎么处理
|
22
msg7086 2014-07-08 16:59:02 +08:00 1
|
23
codingpp 2014-07-08 18:07:39 +08:00
会不会是journal日志的影响
|
25
skybr 2014-07-08 18:36:58 +08:00
|
26
happy123 2014-07-08 18:37:10 +08:00
mongostat
看一下faults数目,正常情况下应该为0的。如果持续大于0说明一直在换页,该加内存了。如果持续100+,iostat看下IO负载,绝对要加内存了。 |
27
codingpp 2014-07-08 18:46:01 +08:00
@undeflife
用了journal日志也会丢消息吧,mongo又不支持事务,journal刷新磁盘默认好像是100ms,这100ms内的日志还会丢 把journal日志关掉,就是把这100ms变成了60s 前天写个用mongo的程序,数据文件300m,journal日志3g,过不了几天我的小vps就没空间了。。。 |
28
undeflife OP |
29
sujin190 2014-07-08 19:09:23 +08:00
这个4g内存,8g数据怎么会有那么高的fault,是不是索引建的有问题啊?或者是数据结构问题,每次查询都要调入所有数据到内存?
|
30
sujin190 2014-07-08 19:11:56 +08:00
你这fault是1046么?!!
|
31
undeflife OP @sujin190 找到个坑...程序上有个地方无索引的排序整个大collection,把这个语句干掉之后似乎情况好了不少...
|
34
leafonsword 2014-07-09 13:35:36 +08:00
1.加索引
2.加内存 3.换成支持数据压缩的TokuMX |