我怎么知道elixir服务器上的可用内存量?

时间:2017-03-23 15:08:32

标签: erlang elixir

我使用elixir应用程序中的第三方脚本。我怎么知道我的工作应用程序有多少可用内存?我不需要erlang VM可用的内存,但需要整个计算机内存

2 个答案:

答案 0 :(得分:3)

我发现最明显(但有点麻烦)的方法是从命令行调用vmstat并解析结果:

System.cmd("vmstat", ["-s", "-SM"]) 
  |> elem(0) 
  |> String.trim() 
  |> String.split() 
  |> List.first() 
  |> String.to_integer()
  |> Kernel.*(1_000_000) # convert megabytes to bytes

vmstat是在ubuntu上运行并返回输出的命令:

         3986 M total memory
         3736 M used memory
         3048 M active memory
          525 M inactive memory
          249 M free memory
          117 M buffer memory
          930 M swap cache
            0 M total swap
            0 M used swap
            0 M free swap
      1431707 non-nice user cpu ticks
        56301 nice user cpu ticks
       232979 system cpu ticks
      3267984 idle cpu ticks
        84908 IO-wait cpu ticks
            0 IRQ cpu ticks
        15766 softirq cpu ticks
            0 stolen cpu ticks
      4179948 pages paged in
      6422812 pages paged out
            0 pages swapped in
            0 pages swapped out
     35819291 interrupts
    145676723 CPU context switches
   1490259647 boot time
        67936 forks

适用于ubuntu,应该适用于每个linux

答案 1 :(得分:0)

与平台无关的方式:

:memsup.start_link
:memsup.get_system_memory_data

[
  system_total_memory: 16754499584,
  free_swap: 4194299904,
  total_swap: 4194299904,
  cached_memory: 931536896, 
  buffered_memory: 113426432,
  free_memory: 13018746880,
  total_memory: 16754499584
]

因此要获得以MB为单位的总内存:

mbyte = :math.pow(1024, 2) |> Kernel.trunc

:memsup.get_system_memory_data
|> Keyword.get(:system_total_memory)
|> Kernel.div(mbyte)