Stack level too deep (SystemStackError)

Discussion in 'Ruby' started by Jesper Olsen, Jan 14, 2004.

  1. Jesper Olsen

    Jesper Olsen Guest

    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, Jan 14, 2004
    #1
    1. Advertising

  2. Jesper Olsen

    Gennady Guest

    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, Jan 14, 2004
    #2
    1. Advertising

  3. Jesper Olsen

    Jesper Olsen Guest

    Gennady <> wrote in message news:<>...
    > 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
    Jesper Olsen, Jan 15, 2004
    #3
  4. Jesper Olsen

    Gennady Guest

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

    > Gennady <> wrote in message
    > news:<>...
    >> 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
    <kbytes>".

    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
    Gennady, Jan 15, 2004
    #4
  5. "Gennady" <> schrieb im Newsbeitrag
    news:...
    >
    > On Jan 14, 2004, at 23:31, Jesper Olsen wrote:
    >
    > > Gennady <> wrote in message
    > > news:<>...
    > >> 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
    > <kbytes>".
    >
    > 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


    <lines deleted>
    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
    Robert Klemme, Jan 15, 2004
    #5
  6. Jesper Olsen

    Jesper Olsen Guest

    Gennady <> 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
    > <kbytes>".
    >


    >
    > Sincerely,
    > Gennady Bystritsky


    Thanks Gennady - that helped. (Mine was 4096)

    Cheers
    Jesper
    Jesper Olsen, Jan 15, 2004
    #6
  7. il Thu, 15 Jan 2004 17:18:17 +0900, Gennady <> 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
    ><kbytes>".


    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
    gabriele renzi, Jan 15, 2004
    #7
  8. Jesper Olsen

    Van Jacques Guest

    gabriele renzi <> wrote in message news:<>...
    > il Thu, 15 Jan 2004 17:18:17 +0900, Gennady <> 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
    Van Jacques, Jan 16, 2004
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sam Roberts
    Replies:
    1
    Views:
    212
    Yukihiro Matsumoto
    Feb 11, 2005
  2. Oliver Peng
    Replies:
    5
    Views:
    176
    Robert Klemme
    Mar 5, 2008
  3. Bezan Kapadia
    Replies:
    15
    Views:
    301
    Brian Candler
    Feb 16, 2009
  4. Mrmaster Mrmaster
    Replies:
    6
    Views:
    163
    Mrmaster Mrmaster
    Aug 10, 2009
  5. Joshua Muheim
    Replies:
    14
    Views:
    296
    David Masover
    Oct 1, 2009
Loading...

Share This Page