[erlang-questions] Dangers of generating a large erlang module
Ivan Uemlianin
ivan@REDACTED
Sun Sep 29 12:53:16 CEST 2013
Thanks for your comment.
On 29/09/2013 11:49, Gustav Simonsson wrote:
> What kind of rules are contained in the CSV files? What information is
> defined in each rule?
See reply to Anthony Ramine.
> It's probably easier parsing the rules to some Erlang data type which
> can be given to a generic function.
> The internal format of the rules could be kept in e.g. ETS or in the
> state of a gen_server.
Agreed. However, these rules are going to be heavily consulted.
Wouldn't gen_server and even ETS be more of a bottleneck danger?
Best wishes
Ivan
> Cheers,
> Gustav Simonsson
>
>
> On Sun, Sep 29, 2013 at 11:29 AM, Ivan Uemlianin <ivan@REDACTED
> <mailto:ivan@REDACTED>> wrote:
>
> Dear All
>
> I am generating some erlang code from a csv file and using the
> function save_compile_and_load/2 below to load it into the running
> system. The input csv is essentially a series of rules, so the
> outpout erlang has roughly the same number of lines as the input has
> lines.
>
> save_compile_and_load(__FilePath, Text) ->
> file:write_file(FilePath, Text),
> {ok, ModName} = compile:file(FilePath), % <--
> {module, _M} = code:load_file(ModName),
> code:purge(ModName),
> ok.
>
> All goes well on small test files, but the files I want to use IRL
> are relatively large --- around 120,000 lines.
>
> Running on a Mac (oldish, probably with 32bit emulator), compiling
> (the line marked in the code below) causes an error and crashes the
> VM, with several repeats of this error message:
>
> beam.smp(1992,0xb022b000) malloc:
> *** mmap(size=913309696) failed (error code=12)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
>
> Running on linux with (presumably) a 64bit emulator, the compile
> works, but takes about 15 minutes.
>
> I'm not especially bothered that it takes a long time, but I am
> worried that this is something that could crash the whole system.
>
> I'm looking into splitting up the code into several smaller modules,
> but obviously I'd rather avoid crashing the VM.
>
> Questions:
> - is compiling large files on a 64bit emulator safe? What effects
> could there be on other processes?
> - can I wrap the compile:file call in something so that it will bail
> out if memory issues look likely (try/catch is no use)?
>
> With thanks and best wishes
>
> Ivan
>
>
> --
> ==============================__==============================
> Ivan A. Uemlianin PhD
> Llaisdy
> Speech Technology Research and Development
>
> ivan@REDACTED <mailto:ivan@REDACTED>
> www.llaisdy.com <http://www.llaisdy.com>
> llaisdy.wordpress.com <http://llaisdy.wordpress.com>
> github.com/llaisdy <http://github.com/llaisdy>
> www.linkedin.com/in/__ivanuemlianin
> <http://www.linkedin.com/in/ivanuemlianin>
>
> festina lente
> ==============================__==============================
> _________________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
> http://erlang.org/mailman/__listinfo/erlang-questions
> <http://erlang.org/mailman/listinfo/erlang-questions>
>
>
--
============================================================
Ivan A. Uemlianin PhD
Llaisdy
Speech Technology Research and Development
ivan@REDACTED
www.llaisdy.com
llaisdy.wordpress.com
github.com/llaisdy
www.linkedin.com/in/ivanuemlianin
festina lente
============================================================
More information about the erlang-questions
mailing list