![]() | 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 ![]() mongo疯吃IO就是内存太小, 装不下热数据, 要再redis不是OOM, 就是mongo让出部分内存, 自己对IO吃得更厉害, 这是往死里做啊. |
4 kslr 2014-07-08 10:40:33 +08:00 ![]() 碰到过,原因就是内存不够用,解决办法只有加内存。 |
![]() | 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 ![]() 我不太清楚你的程序有多大的查询量,也不太清楚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 ![]() |
![]() | 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 |