LoginSignup
4
2

More than 1 year has passed since last update.

はじめに

Nervesにsshするとこんな表示がでます。

スクリーンショット 2022-10-28 22.10.33.png

この記事はMemory usageを深掘してみます。

こたえ

早速答えです。

  def memory_stats() do
    # Use free to determine memory statistics. free's output looks like:
    #
    #                   total        used        free      shared  buff/cache   available
    #     Mem:         316664       65184      196736          16       54744      253472
    #     Swap:             0           0           0

    {free_output, 0} = System.cmd("free", [])
    [_title_row, memory_row | _] = String.split(free_output, "\n")
    [_title_column | memory_columns] = String.split(memory_row)
    [size_kb, used_kb, _, _, _, _] = Enum.map(memory_columns, &String.to_integer/1)
    size_mb = round(size_kb / 1000)
    used_mb = round(used_kb / 1000)
    used_percent = round(used_mb / size_mb * 100)

    {:ok, %{size_mb: size_mb, used_mb: used_mb, used_percent: used_percent}}
  rescue
    # In case the `free` command is not available or any of the out parses incorrectly
    _error -> :error
  end

要するに、freeコマンドの結果で、Memtotalusedの値で計算しています。
文字列を改行(\n)でsplitしてあとは巧みにパターンマッチをして値を取り出しています。
coolです。何かの折にきっとこの技を使いたいと切におもいました。

試してみる

Nervesをお使いの方は、sshしてお楽しみください。

macOSで試してみようとしました。しかし、macOSには、freeコマンドはありません。
そこでDockerで動かしてみます。

CMD
docker pull hexpm/elixir:1.14.1-erlang-25.1.2-ubuntu-xenial-20210804
docker run --rm -it hexpm/elixir:1.14.1-erlang-25.1.2-ubuntu-focal-20211006 iex

IExが立ち上がります。
あとは、「こたえ」のところで示したコードを実行してください。
再掲しておきます。

{free_output, 0} = System.cmd("free", [])
[_title_row, memory_row | _] = String.split(free_output, "\n")
[_title_column | memory_columns] = String.split(memory_row)
[size_kb, used_kb, _, _, _, _] = Enum.map(memory_columns, &String.to_integer/1)
size_mb = round(size_kb / 1000)
used_mb = round(used_kb / 1000)
used_percent = round(used_mb / size_mb * 100)

コピペして貼り付けて、迷わず実行してみてください。

おわりに

この記事は、Nervesにsshしたときに表示されるMemory usageを深掘してみました。
Dockerで試してみる方法もご紹介しました。

Enjoy Elixir!!!

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