LoginSignup
2
2

この記事は、Elixir Advent Calendar 2023 シリーズ14 の6日目です


piacere です、ご覧いただいてありがとございます :bow:

Elixirは、言語機能を支えるサービスがプロセスで構成されており、それらプロセスに名前が付いているので、プロセス名を調べ、プロセス情報を拾うことができます

プロセス名の調べ方(シングルクラスタ)

Elixirの名前付きプロセスのプロセス名は、シングルクラスタ内に閉じた名前と、マルチクラスタで共有している名前の2種類ありますが、シングルクラスタは下記で調べられます

iex> Process.registered
[:kernel_safe_sup, :global_group_check, :user, :elixir_sup,
 :logger_handler_watcher, :standard_error_sup, :init, :user_drv, :observer,
 :appmon_info, :rex, :inet_db, :elixir_code_server, :erts_code_purger,
 :standard_error, :socket_registry, IEx.Config, :user_drv_writer,
 :erl_signal_server, IEx.Pry, :kernel_sup, :timer_server, Logger.Supervisor,
 :code_server, :logger_std_h_default, :logger_sup, :erl_prim_loader,
 :user_drv_reader, :global_name_server, :logger, IEx.Broker, :file_server_2,
 :elixir_config, :global_group, :application_controller, :kernel_refc,
 IEx.Supervisor, :wxe_master, :logger_proxy]

下記で調べることもできます(プロセスIDのリンクをクリックすると、親プロセスやリンクプロセスにも飛べます)

iex> :observer.start

image.png

Phoenixだと、http://localhost:4000/dev/dashboard で調べることができます

image.png

プロセス情報の調べ方

特定したプロセス名を使って、プロセスIDを取得し、プロセス情報を得ることができます

たとえば、:global_group プロセスはGenServerで、2つのプロセスにリンクしていることが分かります

iex>  Process.whereis(:global_group) |> Process.info
[
  registered_name: :global_group,
  current_function: {:gen_server, :loop, 7},
  initial_call: {:proc_lib, :init_p, 5},
  status: :waiting,
  message_queue_len: 0,
  links: [#PID<0.49.0>, #PID<0.62.0>],
  dictionary: [
    "$ancestors": [:kernel_sup, #PID<0.47.0>],
    whereis_name: [:undefined],
    registered_names: [:undefined],
    send: [:undefined],
    global_group_check: #PID<0.62.0>,
    "$initial_call": {:global_group, :init, 1}
  ],
  trap_exit: true,
  error_handler: :error_handler,
  priority: :max,
  group_leader: #PID<0.46.0>,
  total_heap_size: 376,
  heap_size: 376,
  stack_size: 11,
  reductions: 549,
  garbage_collection: [
    max_heap_size: %{
      error_logger: true,
      include_shared_binaries: false,
      kill: true,
      size: 0
    },
    min_bin_vheap_size: 46422,
    min_heap_size: 233,
    fullsweep_after: 65535,
    minor_gcs: 0
  ],
  suspending: []
]

observerだと、プロセスリストのプロセスをダブルクリックしたら見れます

image.png

Phoenixでも、プロセスリストのプロセスをクリックしたら見れます

image.png

2
2
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
2
2