[erlang-questions] spawn problem

Fernando Ipar <>
Tue Mar 27 03:17:50 CEST 2007

Hello all,

I'm writing a little module to make use of erlang's lightweight 
processes and load test external programs/servers.

Here's a very simple first version:

---- code ----
test(_, 0) ->

test(Command, Threads) when number(Threads) ->
        spawn('os', 'cmd', [Command]),
        test(Command, Threads - 1).

start() ->
        Command = list_to_atom(os:getenv("Command")),
        Threads = list_to_integer(os:getenv("Threads")),

--- end code ----

I know this is a very rudimentary first version and I would have to take 
more things into account, like the period of time
over which the processes are created (ala Jakarta James) and all, but 
this is just a pet project to learn the basics of erlang by
doing something I find more useful than Fibonacci :)

My problem is that if I call this with more than 508 'Threads' (bear 
with me on the variable name selection..) I get this error:

Error in process <0.1046.0> with exit value: 
{emfile,[{erlang,open_port,[{spawn,"sh -s unix:cmd 

I get as many error messages as times I exceed the number 508.
I've looked around and it seems 'emfile' means too many open files, 
which is strange, given the output of ulimit -a:

[ testing]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7663
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7663
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
file locks                      (-x) unlimited

I've looked around sysctl -a and it seems everything's fine too.

While this project in particular is not important, I'll appreciate any 
help with this problem, since I'd like to know how many processes I can 
create in erlang, and what tweaking needs to be
done to the OS (if any).

On another note, I'm working on a rewrite of my HA project for MySQL in 
erlang, also as a learning experience. This is still green, but if 
anyone wants to let me know what you think
about the code, you can browse the svn repository here: 
The script tabs.sh lets you replace \t (I use vim for programming) for 
any given amount of whitespace.

Thanks in advance for any help.


More information about the erlang-questions mailing list