Stack level too deep (SystemStackError)

I have a program where I’m getting a Stack level too deep (SystemStackError)
exception

I did not expect this, and I would prefer to fix it by increasing the
stack, rather than changing the program…

Is this possible?
I think this exception is quite common, but was not able to google a
solution.

Jesper

···


http://JesperOlsen.Net

Jesper Olsen wrote:

I have a program where I’m getting a Stack level too deep (SystemStackError)
exception

I did not expect this, and I would prefer to fix it by increasing the
stack, rather than changing the program…

Is this possible?
I think this exception is quite common, but was not able to google a
solution.

Jesper


http://JesperOlsen.Net

What’s your OS? BTW, it is a known issue with Mac OS X where in most
cases you must increase the default stack size.

Gennady.

Gennady gfb@tonesoft.com wrote in message news:4005BB60.70009@tonesoft.com

Jesper Olsen wrote:

I have a program where I’m getting a Stack level too deep (SystemStackError)
exception

I did not expect this, and I would prefer to fix it by increasing the
stack, rather than changing the program…

Is this possible?
I think this exception is quite common, but was not able to google a
solution.

Jesper


http://JesperOlsen.Net

What’s your OS? BTW, it is a known issue with Mac OS X where in most
cases you must increase the default stack size.

How?

Gennady.

It happens both with

  • Ruby 1.6.8 on BSD Unix
  • Ruby 1.8.0 on Win2000

Jesper

Gennady gfb@tonesoft.com wrote in message
news:4005BB60.70009@tonesoft.com

Jesper Olsen wrote:

I have a program where I’m getting a Stack level too deep
(SystemStackError)
exception

I did not expect this, and I would prefer to fix it by increasing the
stack, rather than changing the program…

Is this possible?
I think this exception is quite common, but was not able to google a
solution.

Jesper


http://JesperOlsen.Net

What’s your OS? BTW, it is a known issue with Mac OS X where in most
cases you must increase the default stack size.

How?

In bash, “ulimit -s” shows the current stack size in kbytes (defaults
to 8192 in Mac OS X, really low). To change it issue “ulimit -s
”.

The command may be different for other shells. You may put this command
in /etc/profile to be set every time a user logs in.

Gennady.

It happens both with

  • Ruby 1.6.8 on BSD Unix
  • Ruby 1.8.0 on Win2000

The above command will work for BSD Unix too. I do not know how to do
it for Win2000.

Are you sure that there’s no actual problem with your program? It may
really be run-away in recursion, so increasing the stack size will only
make the problem happen somewhat later.

Jesper

Sincerely,
Gennady Bystritsky

···

On Jan 14, 2004, at 23:31, Jesper Olsen wrote:

“Gennady” gfb@tonesoft.com schrieb im Newsbeitrag
news:292FAB16-4733-11D8-95BE-0003939AEA24@tonesoft.com

Gennady gfb@tonesoft.com wrote in message
news:4005BB60.70009@tonesoft.com

Jesper Olsen wrote:

I have a program where I’m getting a Stack level too deep
(SystemStackError)
exception

I did not expect this, and I would prefer to fix it by increasing
the
stack, rather than changing the program…

Is this possible?
I think this exception is quite common, but was not able to google a
solution.

Jesper


http://JesperOlsen.Net

What’s your OS? BTW, it is a known issue with Mac OS X where in most
cases you must increase the default stack size.

How?

In bash, “ulimit -s” shows the current stack size in kbytes (defaults
to 8192 in Mac OS X, really low). To change it issue “ulimit -s
”.

The command may be different for other shells. You may put this command
in /etc/profile to be set every time a user logs in.

Gennady.

It happens both with

  • Ruby 1.6.8 on BSD Unix
  • Ruby 1.8.0 on Win2000

The above command will work for BSD Unix too. I do not know how to do
it for Win2000.

Are you sure that there’s no actual problem with your program? It may
really be run-away in recursion, so increasing the stack size will only
make the problem happen somewhat later.

Hm. On cygwin this happens:

10:15:30 [ContentReporter_BRANCH]: cat /c/temp/ruby/ulimit.sh
#!/bin/bash -f

ruby -e ‘def t(i);p i;t(i+1);end;t(0)’
ulimit -s

13281 13282 13283 -e:1:in `p': stack level too deep (SystemStackError) from -e:1:in `t' from -e:1:in `t' from -e:1:in `t' from -e:1:in `t' from -e:1:in `t' from -e:1:in `t' from -e:1:in `t' from -e:1:in `t' ... 13274 levels... from -e:1:in `t' from -e:1:in `t' from -e:1:in `t' from -e:1 2047

This means that a stack size of approx 2MB suffices only for 13000+ stack
levels. IOW about 157 bytes per stack frame.

Unfortunately this can’t be changed on cygwin:

10:16:06 [ContentReporter_BRANCH]: ulimit -s 4096
bash: ulimit: stack size: cannot modify limit: Invalid argument
10:18:19 [ContentReporter_BRANCH]: ulimit -S -s 4096
bash: ulimit: stack size: cannot modify limit: Invalid argument
10:18:23 [ContentReporter_BRANCH]: ulimit -H -s 4096
bash: ulimit: stack size: cannot modify limit: Invalid argument

I’ve always felt that Ruby is not too comfortable with recursion…

Cheers

robert
···

On Jan 14, 2004, at 23:31, Jesper Olsen wrote:

Gennady gfb@tonesoft.com wrote in message :

What’s your OS? BTW, it is a known issue with Mac OS X where in most
cases you must increase the default stack size.

How?

In bash, “ulimit -s” shows the current stack size in kbytes (defaults
to 8192 in Mac OS X, really low). To change it issue “ulimit -s
”.

Sincerely,
Gennady Bystritsky

Thanks Gennady - that helped. (Mine was 4096)

Cheers
Jesper

on a sidenote, someone I know has the same max stack size as me
(8192), and with slightly different versions of 1.8.1, on debian he’s
got a SystemStackError calculating ackermann(3,7), while I can even
calculate ackermann(3,8).
I’m not a unix guru, may be possible that there are other things to
look for?

the ackermann implementation is:
def ackermann(m, n)
if m == 0
n + 1
elsif n == 0
ack(m - 1, 1)
else
ack(m - 1, ack(m, n - 1))
end
end

···

il Thu, 15 Jan 2004 17:18:17 +0900, Gennady gfb@tonesoft.com ha scritto::

On Jan 14, 2004, at 23:31, Jesper Olsen wrote:

In bash, “ulimit -s” shows the current stack size in kbytes (defaults
to 8192 in Mac OS X, really low). To change it issue “ulimit -s
”.

gabriele renzi surrender_it@remove.yahoo.it wrote in message news:tg7e00hfutku40nsrv2jubklmma91v712m@4ax.com

il Thu, 15 Jan 2004 17:18:17 +0900, Gennady gfb@tonesoft.com ha
scritto::
I had the same problem with stacksize too low on a MAC OS X,
running the 3n+1 problem. It would go till the number in the 30s
where there are many iterations, then give me the stacksize
error. Increasing the stacksize solved the problem.

Van