Я отлаживаю утечку памяти в большом приложении Rails, и, просмотрев дамп кучи, я обнаружил, что причина заключается во многих замороженных строках, которые являются данными и не должны были быть заморожены.
Содержимоестроки позволяют легко найти, где они были созданы, но я не знаю, какой код отвечает за их замораживание.Я мог бы покопаться и найти его в конце концов, но теперь мне действительно интересно узнать, кто отвечает за замораживание определенных строк в куче.
Исправление обезьян String#freeze
ничего не выявило.
Есть предложения по выяснению, где / почему произошло замораживание?Я не возражаю исправлять саму Ruby и увеличивать rb_str_freeze
или rb_obj_freeze
, если придется.Я могу нацелить проблемные строки, посмотрев на первые 40 символов.