Elixirでプロセス20万位作ってみた
Elixirの下のErlang VMは軽量プロセスという仕組みを使って、並列プログラミングをサポートしている。ErlangのプロセスはOSのプロセスとは異なり、VM内でプロセスを切り替えている。
erlangやElixirではプロセスの使用を勧められる。
実際、どのくらいのプロセスが生成出来るか調べてみた。
process limitの引き上げ
20万プロセスまで生成出来た。それ以上はデフォルトのprocess limit に引っかかって起動出来なかった。erl +P 1000000
でprocess limit をあげられるそうだが、erlang r18からそのオプションは無効化されたそうで、何を指定すれば、process limitの上限をあげられるかわからなかった。
追記: erlang r18で+P オプションは無効化されてないそうです。
追記:hayabusa333さんが、process_limitの上げ方を調べてくれた。 http://d.hatena.ne.jp/hayabusa333/20151104/elixir_erlang
export ELIXIR_ERL_OPTIONS="+P 1000000"
iex --sname bar@localhost --cookie foo -S mix run -e "ManyProcessFactory.main"
このように、ELIXIR_ERL_OPTIONS
を使えばprocess_limitを増やせるようだ。
メモリが少ないので、あまり多くのプロセスを立ち上げると、erlのvmがcrashした。
awsで多めのメモリで試してみる。
ex_topを使ってerlang VMの様子を見る
ex_topというツールを使えば exlixirでtopみたいなものを見ることが出来る。
実行結果
20万プロセスを生成し、CPUも上手く分配して使えられているようだ。
使用したソースコード