<div dir="ltr"><div dir="ltr">Hi,<div>I am running a very simple test case (as we are hitting OOM on our larger PyPy deployments) and I'd love some help understanding what is happening here....</div><div>We have a lot of processes that send messages to each other.</div><div>These can be large JSON serializations of objects.</div><div>But the memory being consumed seems out of order and hard to manage across processes.</div><div><br></div></div><div dir="ltr"><div>I have this loop running:<br></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div dir="ltr"><div><div><font face="monospace">import time</font></div></div></div><div dir="ltr"><div><div><font face="monospace">import json</font></div></div></div><div dir="ltr"><div><div><br></div></div></div><div dir="ltr"><div><div><font face="monospace">def main():</font></div></div></div><div dir="ltr"><div><div><font face="monospace">    with open("/tmp/test12334.1234", "r") as f:</font></div></div></div><div dir="ltr"><div><div><font face="monospace">        json_msg = f.read()</font></div></div></div><div dir="ltr"><div><div><font face="monospace"><br></font></div></div></div><div dir="ltr"><div><div><font face="monospace">    while True:</font></div></div></div><div dir="ltr"><div><div><font face="monospace">        j = json.loads(json_msg)</font></div></div></div><div dir="ltr"><div><div><font face="monospace">        time.sleep(10)</font></div></div></div><div dir="ltr"><div><div><br></div></div></div><div dir="ltr"><div><div><font face="monospace">if __name__ == "__main__":</font></div></div></div><div dir="ltr"><div><div><font face="monospace">    main()</font></div></div></div></blockquote><div dir="ltr"><div><br></div><div>I have tried 3 separate general runs across both pypy and cpython.  <br>The first does nothing but the sleep (it doesn't load or json the message)</div><div>The second just loaded the json_str from a file<br>The third is the full loop.</div><div><br></div><div>If I run this in cpython I get (80MB, 92MB and 136MB) respectively</div><div>This makes sense as the file is 11MB json serialization of a dictionary and json.loads takes up some memory</div><div><br></div><div>However if I run this in pypy I get 120MB, 153MB and between 360-405MB when it settles out.</div><div>I get the JIT and startup memory being higher, spending a little more loading the string but WOW does json loading the string chew up a bunch.  <br><br>Multiplying that memory across processes is eating a bunch.</div><div><br></div><div>What easy things am I missing?</div><div><br></div><div>Thanks,<br>Rob</div><div><br></div><div><br></div><div dir="ltr" class="gmail_signature"><div style="width:510px"><div> </div></div></div></div></div>