Rich_Morin

Rich_Morin

Ways to keep coding errors from crashing the Erlang VM?

Although the Erlang VM is designed to be very robust in the presence of coding errors, there are still a few ways to crash it. How to Crash Erlang describes several of these:

  • Run out of atoms.
  • Run out of processes.
  • Flood the mailbox for a process.
  • Create too many large binaries in a single process.

This makes me wonder whether there might be ways to protect the VM against these (and other) categories of coding errors. For example, I could imagine ways to monitor use of limited resources, killing aberrant processes before they can crash the VM.

Can anyone help me to understand why this hasn’t been done, at least as an option for use in pre-production testing? ELIF…

-r

First Post!

D4no0

D4no0

The first issue can be averted easily: Don’t create new atoms at runtime, if you need string to atom conversion just use String.to_existing_atom.

Other issues except the mailbox flooding seem to be related to running out of memory issue, because in the case of processes while you have a limit set, you can increase it with a flag when starting the VM. Large binaries are stored in a shared memory space and processes have pointers to them, so I don’t think there is a limit to how many big binaries you can reference.

Where Next?

Popular in Questions Top

Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 44778 311
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New

We're in Beta

About us Mission Statement