我正在运行一个Neo4j实例,并通过REST从我的Ruby on Rails应用程序访问它。最近,我观察到在中等流量激增期间,对我的Neo4j REST服务器的并发请求最终在TIME_WAIT状态(高达~14000)时连接太多。最终,这会导致我的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内核)帮助吗?
我还缺少其他的东西吗?