coredump generated when OOM in PYPY

Issue #2936 new
Weikang Jin
created an issue

Python version: pypy-6.0.0-linux_x86_64-portable Operating System: CentOS Linux release 7.6.1810

CODE

from gevent import monkey
monkey.patch_all()
import bottle
from bottle import route, run
import sys, random, string
PYPY = hasattr(sys, 'pypy_version_info')

# test cpython
if not PYPY:
    import resource

    def limit_memory(maxsize):
        soft, hard = resource.getrlimit(resource.RLIMIT_AS)
        resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))

    limit_memory(200 * 1000 * 1000 * 2)

@route('/')
def index():
    buf = []
    for _ in range(1000):
        buf.append(random.choice(string.letters) * 10**6)
    return "ok"

if __name__ == "__main__":
    run(host='localhost', port=8000)
else:
    app = bottle.default_app()

RUN

$ PYPY_GC_MIN=300MB PYPY_GC_MAX=400MB PYPYLOG=gc:- pypy app.py
$ http :8000

LOG

[596869e8b3584] gc-collect-step}
    return self.wsgi(environ, start_response)
  File "/root/workspace/pypy-6.0.0-linux_x86_64-portable/site-packages/bottle.py", line 954, in wsgi
    out = self._cast(self._handle(environ))
  File "/root/workspace/pypy-6.0.0-linux_x86_64-portable/site-packages/bottle.py", line 862, in _handle
    return route.call(**args)
  File "/root/workspace/pypy-6.0.0-linux_x86_64-portable/site-packages/bottle.py", line 1740, in wrapper
    rv = callback(*a, **ka)
  File "app.py", line 22, in index
    buf.append(random.choice(string.letters) * 10**6)
MemoryError
127.0.0.1 - - [03/Jan/2019 11:40:55] "GET / HTTP/1.1" 500 59

...

[5968a410c163e] gc-minor}
[5968a410c4338] {gc-collect-step
starting gc state:  SWEEPING
[5968a4133cc50] {gc-collect-done
arenas:                12  =>  12
bytes used in arenas:  5108344
bytes raw-malloced:    439381936  =>  439382032
[5968a41350048] gc-collect-done}
RPython traceback:
  File "pypy_interpreter_1.c", line 19837, in Method_descr_method_getattribute
  File "pypy_interpreter.c", line 36849, in BuiltinCode2_fastcall_2
  File "pypy_objspace.c", line 23854, in descr__getattribute__
using too much memory, aborting
[1]    2728 abort (core dumped)  PYPY_GC_MIN=300MB PYPY_GC_MAX=400MB PYPYLOG=gc:- pypy app.py

MemoryError raised but the memory does not collect: bytes raw-malloced: 439381936 => 439382032

but cpython works expected, the processor is still alived and memory is normal state.

Comments (1)

  1. Log in to comment