Size: a a a

Saint P Ruby Community

2020 March 05

A

Alex in Saint P Ruby Community
У меня буквально на днях, пуме поплохело, я зашел смотреть метрики, 28 гигов съедено пумой из 32 свободных.
источник

MS

Mikhail Sytchev in Saint P Ruby Community
У меня тоже сложилось впечатление что процесс пумы “видит” какой-то конечный объем RAM. Это догадки на основе наблюдений за поведением приложения.
источник

MS

Mikhail Sytchev in Saint P Ruby Community
Тут еще такой момент: приложение несколько лет жило на более скромном сервере и всего ему хватало. Переехало с ростом пользовательской базы на новую машину и начались проблемы =)
источник

MS

Mikhail Sytchev in Saint P Ruby Community
т.е. изменений на уровне кода приложения не было, но поменялось железо и ОС
источник

A

Alex in Saint P Ruby Community
Ну так больше пользователей, больше трафик, больше аллокаций, больше размер кучи, больше проблем с фрагментацией.
источник

MS

Mikhail Sytchev in Saint P Ruby Community
Трафик пока не возрос, обкатываем сетап
источник

EM

Eugene Maslenkov in Saint P Ruby Community
Вообще мысль про фраг ентацию памяти годная. Я то же предполагаю, что это может быть GC. В какой-то момент пытается почистить и ты получаешь полное понимание пумы, а потом у него действительно куча не равномерно распределенных мест...
источник

EM

Eugene Maslenkov in Saint P Ruby Community
Понимание = повисание.
источник

A

Alex in Saint P Ruby Community
Вообще, во времена юникорна, я помню что была такая техника, прибивать воркера, когда он съедал памяти больше определенного лимита.
источник

EM

Eugene Maslenkov in Saint P Ruby Community
Да, есть даже gem unicorn-worker-killer 🤗
источник

A

Alex in Saint P Ruby Community
С пумой, может быть тоже можно как-то так поступить, у нее же есть кластер моуд, или как он там называется, когда стартует несколько процессов в контексте которых уже запускаются треды.
источник

A

Alex in Saint P Ruby Community
Но вообще, это все конечно страшные костыли:)
источник

m

max in Saint P Ruby Community
а что со свапом?
/proc/sys/vm/swappiness
а то вот это подтормаживание после того как занято 60% памяти выглядит как дефолтный swappiness 60 - и тормозит из-за свапа
(хотя это конечно не решит проблему с утекающей памятью)
источник

A

Alex in Saint P Ruby Community
я своп обычно отключаю:))
источник

?

? in Saint P Ruby Community
Alex
С пумой, может быть тоже можно как-то так поступить, у нее же есть кластер моуд, или как он там называется, когда стартует несколько процессов в контексте которых уже запускаются треды.
Пума воркер киллер собственно и да это костыльная но нормальная практика в свое время была
источник

A

Alex in Saint P Ruby Community
угу
источник

АФ

Артем Филатов in Saint P Ruby Community
Eugene Maslenkov
Вообще мысль про фраг ентацию памяти годная. Я то же предполагаю, что это может быть GC. В какой-то момент пытается почистить и ты получаешь полное понимание пумы, а потом у него действительно куча не равномерно распределенных мест...
Могу еще посоветовать понаблюдать в мониторнге за спайками по CPU usage в момент, когда начинаются тормоза, поскольку если есть подозрение на GC, то он начинает резко потреблять CPU. Нельзя, конечно, ссылаться по аналогии, но в JVM как раз такая ситуация, что если GC настроен некорректно, и начинают работать stop-the-world паузы, CPU usage резко поднимается
источник

?

? in Saint P Ruby Community
MALLOC_ARENA_MAX еще можно поиграться
источник

A

Alex in Saint P Ruby Community
вряд ли виноват именно GС, потому что (в моем случае) производительность стабильно деградирует, нет флюктуаций, всплесков по CPU тоже нет
источник

MS

Mikhail Sytchev in Saint P Ruby Community
max
а что со свапом?
/proc/sys/vm/swappiness
а то вот это подтормаживание после того как занято 60% памяти выглядит как дефолтный swappiness 60 - и тормозит из-за свапа
(хотя это конечно не решит проблему с утекающей памятью)
вот это мне кажется годное направление для проверки
источник