問題タブ [erlang-supervisor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
erlang - シャットダウン信号を受信すると、子を動的に開始すると例外が発生します
スーパーバイザー:
子供:
supervisor:which_children(mod_guild_chapter_sup)
:
受信時の例外shutdown
:
ご覧のとおり、そこにあってはundefined
ならない pid があります。
ドキュメントにはこれを説明する 2 つの場所がありますが、それらの間に矛盾があります。
temporary
返されても子が存在しない場合、子の指定はスーパーバイザによって保持されますignore
。
start は、子プロセスを開始するために使用される関数呼び出しを定義します。apply(M,F,A) として使用される module-function-arguments タプル {M,F,A} でなければなりません。
start 関数は、子プロセスを作成してリンクする必要があり、{ok,Child} または {ok,Child,Info} を返す必要があります。ここで、Child は子プロセスの pid であり、Info はスーパーバイザーによって無視される任意の用語です。
start 関数は、何らかの理由で子プロセスを開始できない場合にも無視を返すことができます。その場合、子の仕様は (一時的な子でない限り) スーパーバイザーによって保持されますが、存在しない子プロセスは無視されます。
simple_one_for_one
start 時に戻った場合、pid はスーパーバイザに追加されませんignore
。
子プロセス開始関数が無視を返す場合、子仕様がスーパーバイザーに追加され (スーパーバイザーが simple_one_for_one スーパーバイザーでない限り、以下を参照)、pid が未定義に設定され、関数は {ok,undefined} を返します。
simple_one_for_one スーパーバイザーの場合、子プロセス開始関数が ignore を返すと、関数は {ok,undefined} を返し、子はスーパーバイザーに追加されません。
私はその文書に混乱した。transient
クラッシュ時に子が再起動する必要があるため、再起動戦略を選択します。しかし、ここでこの例外を回避するにはどうすればよいですか?
erlang - Erlang でスーパーバイザーによってすべての gen_server を強制終了します
Erlang には、gen_server プロセス (my_gen) を開始および監視するスーパーバイザー (my_sup) モジュールがあります。my_gen を変更、コンパイル、ロードしたら、アプリケーションを再起動する必要があります。
スーパーバイザー (my_sup) によってすべてのプロセス (gen_server) を強制終了し、プロセス (gen_server) を再起動するより良い方法はありますか?
emacs - Erlang スーパーバイザー/gen_server 例外終了: noproc
私は今、これに対する問題が何であるかを理解しようとして気が狂っています。
基本的に、1 つのサーバーと 1 つの gen_event-behaviour モジュールで簡単なスーパーバイザーをセットアップしたいだけです。
今の問題は、それをもう開始できないことです。それはスーパーバイザーです。
何をしてもこのエラーが発生します: ** exception exit: noproc
text-tracer を使用すると、sRPG_supervisor:init/1 で発生することが示されます。そして、これでコードに何か問題があると思いますが、他の人の例を実行するとまったく同じ結果になります(Joe Armstrongsの例をダウンロードし、同じ結果でsellaprime_supervisorをテストしました)。
仮想Ubuntuインストールで実行すると、正常に起動していました。次に、Windowsでコーディングできるようにセットアップしましたが、これの最も単純な形式が機能することをテストしたことはなく、明らかに何らかの理由で機能しません。
したがって、誰かが同様の問題を抱えている場合は、解決策を見つけることができます! OTP 17 の Erlang バージョンとして erl6.3 を使用しています。
私が使用しているコードは次のとおりです。Emacs で生成されたスケルトンからビルドアップしたものです: sRPG_supervisor.erl
sRPG_server.erl
sRPG_event_handler.erl
何が起こるかの例を次に示します。
ご覧のとおり、サーバーはスーパーバイザーなしで呼び出されたときに機能します。
他の人が抱えていた同様の問題をよく調べましたが、役に立ちませんでした。
erlang - Erlang スーパーバイザの動的変更による再起動強度の変更
私の質問は、リリース アップグレード シナリオとは別に、既に実行中のスーパーバイザの再起動強度のしきい値を変更できますか。
前に出たことはありませんが、最初は子なしでスーパーバイザーを実行しているため、別のプロセスが Supervisor:start_child/2 を介して子を開始するため、私の sup init/1 は次のようになります。
スーパーバイザーの起動時には、予想される子供の数は不明です。確かに、10 から 10,000、またはそれ以上まで劇的に変化する可能性があります。
たとえば 20 の再起動強度は、10 人の子供には十分な量ですが、たとえば 10,000 人の子供の場合は、それを増やしたいと思います... 通常の終了により子供の数が減少するにつれて、それを減らします。
concurrency - Elixir/Erlang と Cowboy - スーパーバイザの使い方
Mix を使用してアプリケーションを作成すると、常にルート スーパーバイザ ファイルがプロジェクトに追加されます。supervise 関数の「子仕様」配列が空であることに注意してください。
app.ex:
アプリケーションのエントリ ポイントも作成されます。オンラインで見つけたいくつかの例を調べて、次のように書きました。
このアプリケーションは機能しますが、 App.start()でApp.Supervisor.start_link( )への呼び出しを削除しても機能します。
では、この場合、監督者は何のためにいるのでしょうか? スーパーバイザーの子仕様が空の場合、その意味は何ですか?
たとえば、ここにある Elixir の例 - https://github.com/IdahoEv/cowboy-elixir-example/blob/master/lib/cowboy_elixir_example.ex - スーパーバイザーを開始する呼び出しがコメントアウトされていることがわかります。 65行目。
しかし、Cowboy Erlang の公式の例では、このファイル - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl - 子仕様のない同様のルート スーパーバイザを作成し、呼び出します。ここのメイン アプリケーション ファイルの 22 行目 - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl
concurrency - Elixir - 子プロセスを再起動する代わりに、基本的なスーパーバイザーのセットアップがクラッシュする
Mix 構成ファイルがないことを無視して、次のように記述します。
アプリケーションを再起動せずに最初の実行 (iex -S mix) の後にクラッシュします。エラーメッセージは次のとおりです。
ただし、次のように直接Test.start()
呼び出すように変更した場合:Test.Method.start()
その後、正常に実行されますが、コードは監視されません。ここでの実装または理解のいずれかで基本的な間違いを犯していると確信していますが、その間違いは正確には何ですか?
erlang - パラメータを使用してErlang監視機能を再起動する方法は?
Erlang を学んでいて、スーパーバイザーに質問があります...
3 つのパラメーター (文字列、文字列、数値) を必要とする関数があります。それを監視し、失敗した場合は、渡した 3 つのパラメーターで再起動されるようにします。
これはスーパーバイザーが処理できるものですか、それとも他の概念を検討する必要がありますか?
ありがとう。
2016 年 1 月 23 日更新
1 つ言いたいことがあります... 1439 のエントリのリストがあります。そのリストのエントリごとにスーパーバイザーを作成する必要があります。各エントリには、異なる引数が発生します。たとえば、ここにいくつかの疑似コードがあります (Ruby を連想させます)。
これは、実行時のユーザー インタラクションによってトリガーされます。output_path
とtable_name
も動的ですが、特定のバッチでは変更されません。解きほぐすと、実行は次のようになります。
したがって、361 が失敗した場合は"/output/2016-01-23/"
、 、temp1234
、およびで再起動する必要があり361
ます。
これはスーパーバイザーと一緒にできることですか?