• 希望我没有进入「我就是要证明我的观察是对的」那种魔怔。

    我又做了个测试,麻烦帮看看测试思路是否不对:

    模拟系统内存吃紧的情况,再看看这个内存是否会被释放掉。测试脚本基本不变,就改那个生成json文件的大小的数值(测试的ruby)。 这一次测试的机器内存4G,我把那个数值从 70W 改成 100W,这样生成的文件大小就变成了 73M。 然后开四个窗口每隔半分钟运行一个脚本,当三个进程都把字符串parse成对象后,内存就爆满了。 等第四个进程开始执行JSON.parse时,预期反应是之前设置为空了的进程的内存开始释放,结果是系统随意拿起个进程直接Kill掉了。(如果不想等到第4个进程,可以更改生成json文件大小的那个数值)

  • 感谢解疑。我去多看看资料。

  • 启动ruby没有设置参数,就默认的。

    你这个结果也是没有释放干净啊,就objspace里面是干净的,但system memory的占用应该要下降到50M以内才对。

  • Ruby 的好朋友 -- jemalloc at 2018年11月15日

    但没有尝试 jemalloc ,前几天试了 Sidekiq 作者说的设置 MALLOC_ARENA_MAX=2 ,内存上涨是慢下来了,但性能受影响非常明显。因为现在的执行效率其实完全可以接受,暂时也就没再折腾了。