在并发访问Neo4j REST服务器期间高TIME_WAIT

时间:2012-11-03 08:18:30

标签: tcp io amazon-ec2 amazon-web-services neo4j

我正在运行一个Neo4j实例,并通过REST从我的Ruby on Rails应用程序访问它。最近,我观察到在中等流量激增期间,对我的Neo4j REST服务器的并发请求最终在TIME_WAIT状态(高达~14​​000)时连接太多。最终,这会导致我的Web应用程序出现严重的延迟。

我正在运行这个Neo4j实例,在c1.medium(1.7GiB,2个CPU内核)EC2实例上包含大约10M边和2M顶点。 Neo4j包装器配置为 -Xmx为1024M (1 GiB)。我当前的ulimit设置为100000。

$ ulimit -n 100000

我已经提到http://docs.neo4j.org/chunked/stable/linux-performance-guide.html(我在Ubuntu 12.04 LTS上)。做一个

$watch grep -A 1 dirty /proc/vmstat

给我nr_dirty中的间歇值100-150。样本输出:

Every 2.0s: grep -A 1 dirty /proc/vmstat                                                                                                                     Sat Nov  3 13:25:53 2012
nr_dirty 148
nr_writeback 0
--
nr_dirty_threshold 83748
nr_dirty_background_threshold 41874
pgpgin 131920234

我可以看到一致的Block IO(存储在EBS上)以及大量高上下文切换和中断。

$ vmstat 1 100
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0 141544  32244   3548 319952    1    1    67    36   16   11 11  1 87  1
 3  0 141544  31640   3556 320036    0    0   124   100 3649 4269 48  4 47  1
 0  0 141544  30648   3564 320116    0    0    76   168 2048 2660 24  3 71  3
 1  0 141544  29780   3580 320124    0    0     0   196 4285 6064 31  6 62  2
 0  0 141544  29780   3588 320116    0    0     0    80  826 2264  6  0 92  2
 0  0 141544  29408   3588 320304    0    0   176    52  952 1873 11  1 86  1
 0  0 141544  29408   3596 320296    0    0     0    40  161  389  0  0 99  0
 0  0 141544  29408   3596 320296    0    0     0     0   47   79  0  0 100  0
 0  1 141544  21720   3596 327992    0    0  7660     0  412  359  5  0 87  8
 0  0 141544  21720   3604 327956    0    0     0    80  224  652  0  1 99  1
 0  0 141544  21720   3604 327968    0    0     0    24  131  359  0  0 99  1
 0  0 141544  21720   3604 327968    0    0     0    24  132  359  0  0 100  0
 0  0 141544  21720   3612 327960    0    0     0    56  141  360  0  0 98  1
 0  0 141544  21100   3612 328580    0    0   608     0   99  173  2  0 97  1
 0  0 141544  20604   3620 328700    0    0   120   172 1172 2381 19  2 77  2
 0  0 141544  20604   3620 328700    0    0     0     0   49   85  0  0 100  0
 0  0 141544  20604   3620 328704    0    0     0    32  172  415  1  0 99  0
 1  0 141544  20480   3628 328696    0    0     0   108  578  755 41  1 56  3
 2  0 141544  20356   3628 328708    0    0     0     0  276   49 50  0 50  0
 1  0 141544  20480   3628 328708    0    0     0     0  287   49 50  0 50  0
 4  0 141560  20960   3648 328076   32   20  1092   356 4959 5501 68  6 23  3
 1  0 141560  20340   3656 328224    0    0   276    88 1181 1208 69  2 25  4
 1  0 141560  20340   3656 328280    0    0     0    16  290   53 50  0 50  0
 1  0 141560  20340   3656 328280    0    0     0     0  277   52 50  0 50  0
 1  0 141560  18868   3696 329116    0    0   844   376 2818 2112 67  2 26  5
 1  0 141560  18868   3696 329132    0    0     0     0  287   56 50  0 50  0
 1  0 141560  18868   3696 329132    0    0     0     0  280   46 50  0 50  0

我认为nr_dirty值不是太高。如果有人能确认是否设置

,我会很高兴
vm.dirty_background_ratio = 50
vm.dirty_ratio = 80

http://docs.neo4j.org/chunked/stable/linux-performance-guide.html中所示,会对此有所帮助吗?

或者我已经耗尽了可用的内存(可用内存是~14M,这太低了) - >块IO - >高TIME_WAIT ?在这种情况下,只需将此实例移动到m1.large(7.5 GiB,2个CPU内核)帮助吗?

我还缺少其他的东西吗?

0 个答案:

没有答案