0

Neo4jインスタンスを実行していて、RUBonRailsアプリケーションからREST経由でアクセスしています。最近、中程度のトラフィックの急増中に、Neo4j RESTサーバーへの同時リクエストが、TIME_WAIT状態(最大14000)の接続が多すぎることに気づきました。これは、最終的に、私のWebアプリケーションに大きな待ち時間をもたらします。

c1.medium(1.7GiB、2 CPUコア)EC2インスタンスで約10Mのエッジと2Mの頂点を含むこのNeo4jインスタンスを実行しています。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

一貫したブロック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コア)に移動するだけで役立ちますか?

私がここで見逃している他の何かがありますか?

4

0 に答える 0