我正在尝试找出ruby进程中内存使用的问题。我尝试使用ObjectSpace模块对ruby进程进行堆转储,以了解发生了什么。令人费解的是,linux中的"top“命令报告该进程使用17.8 GB的虚拟内存和15 GB的常驻内存。但是,堆转储的大小只有2.7-2.9 GB。
基于Ruby文档,Objectspace.dump_all方法将ruby堆的内容转储为JSON。
我不能理解是什么占用了剩余的内存。如果有人能帮我理解发生了什么,那就太好了。
谢谢。
发布于 2017-07-25 03:18:48
您的应用程序很可能正在分配对象,然后由垃圾收集器整理这些对象。您可以使用a call to GC.stat检查这一点
Ruby does not release memory back to the operating system以任何有意义的方式。(如果您正在运行MRI)因此,如果您分配了18 3GB的内存,并对15 3GB的内存进行了垃圾回收,那么您最终将得到大约3 3GB的堆数据。
Ruby MRI GC不是压缩垃圾收集器,所以只要堆中有任何数据,堆就不会被释放。这会导致内存碎片和您在应用程序中看到的值。
https://stackoverflow.com/questions/45286197
复制相似问题