R13B02-1: badmatch in memsup:get_memory_usage (Mac OS X 10.6)

Winston Smith smith.winston.101@REDACTED
Sat Oct 17 19:13:43 CEST 2009


I found the problem, the output of vm_stat has changed in Snow Leopard
(10.6) and the code in memsup.erl, in get_memory_usage({unix,darwin})
fails to read the number of pages wired:

get_memory_usage({unix,darwin}) ->
    Str = os:cmd("/usr/bin/vm_stat"),
    {ok, [Free],Str2} = io_lib:fread("Pages free:~d.",skip_to_eol(Str)),
    {ok, [Active],Str3} =
	io_lib:fread("Pages active:~d.", skip_to_eol(Str2)),
    {ok, [Inactive],Str4} =
	io_lib:fread("Pages inactive:~d.", skip_to_eol(Str3)),
    {ok, [Wired],_} =
	io_lib:fread("Pages wired down:~d.", skip_to_eol(Str4)),		%% FAILS HERE
    NMemUsed  = (Wired + Active + Inactive) * 4000,
    NMemTotal = NMemUsed + Free * 4000,
    {NMemUsed,NMemTotal};


Here's the new output of vm_stat (they've inserted "Pages speculative"
before "Pages wired down" comparing to 10.5):

winston$ /usr/bin/vm_stat
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                         110845.
Pages active:                       563208.
Pages inactive:                     201387.
Pages speculative:                    8936.
Pages wired down:                   164629.
"Translation faults":            128602101.
Pages copy-on-write:               2406604.
Pages zero filled:                66882837.
Pages reactivated:                   39662.
Pageins:                            232245.
Pageouts:                            12164.
Object cache: 173 hits of 69999244 lookups (0% hit rate)


Hope this helps!

Thanks.


On Sat, Oct 17, 2009 at 12:14 AM, Winston Smith
<smith.winston.101@REDACTED> wrote:
> Running R13B02-1 on Mac OS 10.6.2 (x86_64), I'm seeing the following
> error when I start my OTP application:
>
> =SUPERVISOR REPORT==== 17-Oct-2009::00:10:08 ===
>     Supervisor: {local,os_mon_sup}
>     Context:    child_terminated
>     Reason:     {{badmatch,{error,{fread,input}}},
>                  [{memsup,get_memory_usage,1},
>                   {memsup,'-handle_info/2-fun-0-',2}]}
>     Offender:   [{pid,<0.74.0>},
>                  {name,memsup},
>                  {mfa,{memsup,start_link,[]}},
>                  {restart_type,permanent},
>                  {shutdown,2000},
>                  {child_type,worker}]
>
>
> Not sure how to diagnose this further ...
>


More information about the erlang-bugs mailing list