On 11 January 2016 at 15:40, Peter Otten <__pete...@web.de> wrote: >> I can't even work out how you trigger a MemoryError on Linux (apart >> from just raising one). I've tried a few ways to make the system run >> out of memory and it just borks the system rather than raise any error >> - I can only interrupt it with REISUB. >> >> Here's a simple one: >> >> $ python -c 'x = []; x.append(iter(x))' >> >> (Make sure you save all your work before trying that!) > > You can set the interpreter on a diet: > > $ ulimit -v 22000 > $ python -c 'print "x"' > x > $ python -c 'print "x"*10**6' > Traceback (most recent call last): > File "<string>", line 1, in <module> > MemoryError
This didn't initially work for me: $ ulimit -v 22000 $ python -c 'print "x"*10**6' python: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory I guess that limit's too low so (in a new terminal): $ ulimit -v 50000 $ python -c '"x"*10**8' Traceback (most recent call last): File "<string>", line 1, in <module> MemoryError Error in sys.excepthook: Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook from apport.fileutils import likely_packaged, get_recent_crashes File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in <module> from apport.report import Report File "/usr/lib/python2.7/dist-packages/apport/report.py", line 20, in <module> import apport.fileutils File "/usr/lib/python2.7/dist-packages/apport/fileutils.py", line 22, in <module> from apport.packaging_impl import impl as packaging File "/usr/lib/python2.7/dist-packages/apport/packaging_impl.py", line 20, in <module> import apt File "/usr/lib/python2.7/dist-packages/apt/__init__.py", line 21, in <module> import apt_pkg ImportError: /usr/lib/python2.7/dist-packages/apt_pkg.so: failed to map segment from shared object: Cannot allocate memory Original exception was: Traceback (most recent call last): File "<string>", line 1, in <module> MemoryError So it seems that it ran out of memory and sys.excepthook failed because of insufficient memory which is the situation Alex Martelli described. However: $ python -c 'raise ValueError' Traceback (most recent call last): ... ImportError: /usr/lib/python2.7/dist-packages/apt_pkg.so: failed to map segment from shared object: Cannot allocate memory Original exception was: Traceback (most recent call last): File "<string>", line 1, in <module> ValueError It seems I need a ulimit of 60000 to get this to work properly: $ ulimit -v 60000 $ python -c 'raise ValueError' Traceback (most recent call last): File "<string>", line 1, in <module> ValueError $ python -c '"x"*10**8' Traceback (most recent call last): File "<string>", line 1, in <module> MemoryError -- Oscar _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor