LoginSignup
9
4

More than 5 years have passed since last update.

Elixirで遠隔PCに侵入#4風「Observerでスーパーバイザのプロセス構成を見る」

Last updated at Posted at 2017-08-18

前回は、プロセスがエラーでダウンしても、スーパーバイザが自動でリカバリーしてくれる様を見ました :kissing_smiling_eyes:

その中で、以下4つの疑問が出てきました

  • 気軽にプロセスを再起動したけど、負荷とか大丈夫なの?
  • 負荷は大丈夫だとしても、プロセスが処理していた状態やデータとかどうなるの?
  • 地味に、cdサーバと一緒にpwdサーバもダウンしてるけど、障害切り分けとして、マズくない?
  • 「strategy: :one_for_one」というコードの説明が無かったけど、これ一体、何?

今回は、1つ目の疑問を検証する前段として、スーパーバイザのプロセス構成を確認します :palm_tree:


:stars: :stars: 【お知らせ】今回の連載の更に先を、今月末8/24(金)開催の「fukuoka.ex #2」でセッション・LTします :stars: :stars:

今連載で扱っているGenServerとスーパーバイザを活用した、ElixirとPhoenixにおける耐障害性について、連載内容に無い応用や、より詳しい内容でセッションします

https://techjin.connpass.com/event/63493/
image.png


スーパーバイザのモジュール化

まず、前回はiexで手打ちしてたスーパーバイザ起動等をモジュール化しておきます

lib/pass_supervisor.ex
import Supervisor.Spec

defmodule PassSupervisor do
    def start_link() do
        servers = [ worker( PassGenServer, [ 0, [ name: :server_process ] ] ) ]
        Supervisor.start_link( servers, strategy: :one_for_one )
    end

    def cat( parameter ) do
        GenServer.call( server_process, { :cat, parameter } )
    end

    def pwd() do
        GenServer.call( server_process, :pwd )
    end
end

スーパーバイザ経由でサーバプロセスを起動します(念のため、クライアント呼出の確認も)

iex> PassSupervisor.start_link()
--- PassGenServer.start_link( 1, [name: :servers_process] ) ---
{:ok, #PID<0.1980.1>}
iex> PassSupervisor.pwd()
"/code/pass"
iex> PassSupervisor.cat( "a.txt" )
"I'm a.txt"

スーパーバイザのプロセス構成をObserverで見る

Erlangから受け継いだモニターツール「Observer」をiex内から起動し、スーパーバイザプロセスとサーバプロセスが起動していることを確認します

# iex -S mix
iex> :observer.start

image.png

「Processes」タブを選択し、スーパーバイザ起動時に表示された「PID<0.1980.1>」を探します

image.png

ダブルクリックすると、スーパーバイザのプロセス詳細が表示され、「Links」枠にこのスーパーバイザと連なっているプロセスへのリンクがあるため、スーパーバイザの次に振られたであろうPIDをクリックします

image.png

GenServerのプロセス名なので、アタリでした :yum:

image.png

「Dictionary」タブを見ると、GenServerで起動したモジュール名も見れます

image.png

スーパーバイザと、その配下のGenServerのプロセス構成が、これで確認できました :golf:

それでは実際に、プロセス起動やスーパーバイザでの再起動における負荷を確認します

次回に続く)

9
4
0

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
9
4