Потребление памяти в Pharo

21 views
Skip to first unread message

voro...@gmail.com

unread,
Dec 12, 2023, 1:16:21 AM12/12/23
to Russian Smalltalk User Group

Здравствуйте!

Давно присматриваюсь к Pharo и недавно даже возникла идея написать наконец свой сайт и использовать Pharo в разработке серверной части (клиентская — на vue). Уж очень нравится подход, который называют живым программированием — отладка и исправление ошибок на ходу, в процессе работы приложения. Но настораживает одна интересная особенность. Даже если просто копаться в среде, не внося никаких изменений в образ и не сохраняя его, потребление памяти процессом pharo постоянно растёт. Если при этом периодически сохранять образ, так же, ничего не меняя в нём, размер образа тоже будет увеличиваться. Такие вещи, как вызов «System → Space left» в меню или многократный вызов «Smalltalk garbageCollect» не особо заметно влияют на процесс освобождения памяти.

Собственно, вопрос: насколько такое поведение нормально и чем оно объясняется? Когда Pharo будет работать на сервере, как будто бы никакой проблемы нет, поскольку образ там сохраняться не будет (это будет контейнер docker или его аналога, либо kubernetes). Но вот непонятный и неконтролируемый рост образа во время разработки несколько напрягает. Опять же, где гарантия, что во время работы в контейнере память не начнёт утекать? Можно конечно поставить ограничение на уровне контейнера, но не рухнет ли процесс при достижении этого ограничения?

chaetal

unread,
Dec 12, 2023, 1:41:32 AM12/12/23
to Russian Smalltalk User Group
На данный момент уже довольно давно не занимаюсь Pharo, но когда занимался, проблем с утечками памяти не наблюдалось ни локально (ни без сохранения , ни при разработке — соответственно, с сохранением), ни на сервере (сайт на Pharo + Pier) работал порядка 10 лет без какого-либо вмешательства по подобным поводам.

Возможно (хотя и крайне маловероятно), попали на какую-то неудачную сборку Pharo. Давно не слежу, ничего тут не могу сказать, но — ещё раз — в такое слабо верится.

Либо (скорее всего) в процессе "копания" создаёте объекты, на которые таки кто-то ссылается и не позволяет сборщику их удалить. Такое вполне возможно, и довольно часто происходило у меня тоже именно во время всякого рода "исследований" и при разработке.

По началу, когда заморачивался решением подобных проблем, пользовался возможностью отслеживания обратных ссылок — не всегда просто, но всегда находил "концы" (кто и почему "держал" объекты) и после их принудительного удаления "подвисшые" объекты благополучно собирались. Уже не помню деталей, но для Pharo это было довольно характерно — за кадром кто-то (если не изменяет память, в основном инструменты типа инспекторов и т.п.) по каким-то причинам продолжают держать всякие "хитрые" коллекции, которые неочевидным образом через довольно длинные цепочки ссылаются на объекты, которые, как интуитивно кажется должны были быть собраны GC. Опять же, смутно припоминаю, что это это были пережитки Morphic-а… Но это не точно :). 

Потом чаще начал "забивать" на такое. Наладил для себя механизмы автоматизированной загрузки нужных модулей в чистый образ и стал просто выкидывать "загаженный" образ, заново начинать с чистого. 

…Но, повторюсь, всё это веселье всегда происходило именно в процессе исследований/разработки. Самопроизвольных утечек никогда не наблюдал, а на сервере обычно. не "копаются". 

вторник, 12 декабря 2023 г. в 09:16:21 UTC+3, voro...@gmail.com:
Reply all
Reply to author
Forward
0 new messages