46
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Elixirでプロセス20万くらい作ってみた

Last updated at Posted at 2015-11-03

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も上手く分配して使えられているようだ。

使用したソースコード

46
45
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?