我正在调试大型Rails应用程序中的内存泄漏,查看堆转储后,我发现原因是许多冻结的字符串,这些字符串是数据,不应冻结。
字符串的内容使查找它们的创建位置变得容易,但是我不知道是什么代码负责冻结它们。我可以深入研究并最终找到它,但是现在我真的很想知道一种确定谁负责冻结堆中特定字符串的方法。
猴子修补String#freeze
没有发现任何内容。
有什么建议可以找出冻结的位置/原因吗?我不介意修补Ruby本身,如果需要的话可以扩展rb_str_freeze
或rb_obj_freeze
。我可以通过查看前40个字符来定位问题字符串。