Андрей Сумин
@Montmorency
Руководитель группы бэкенд-разработки @ hh.ru
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity
Руководитель группы бэкенд-разработки @ hh.ru
Information
Спасибо за статью. Скажите, пожалуйста, сколько примерно времени у вас ушло на разработку системы уровней и на внедрение системы оценки?
pthread_attr_setstacksize задаёт минимальный размер стека (он же становится максимальным для не-main треда): man7.org/linux/man-pages/man3/pthread_attr_setstacksize.3.html
Чем меньше арен, тем больше contention при использовании malloc. Теоретически это может привести к деградации производительности (тут всё зависит от приложения — насколько интенсивно в нём используется malloc).
На наших типовых сервисах мы не заметили никакого проседания при уменьшении числа арен с 640 (8 * 80) до 4. Ещё меньше ставить не пробовали, так как стали повсеместно внедрять jemalloc.
1. Честно говоря, не припомню, чтобы документация описывала ThreadStackSize как максимальный размер стека. Пруфа в виде ссылки на код у меня, к сожалению, под рукой нет, однако практика показывает, что объём закоммиченной под пул Threads памяти (по показаниям native memory tracking) уменьшается с уменьшением -XX:ThreadStackSize, независимое подтверждение есть у Алексея Шипилева в JVM Anatomy Quark #12: Native Memory Tracking.
2. На графике изображён именно RSS (метрика, которую сообщает cgroups). Большое число арен (которое масштабируется по числу цпу на хосте) ведёт к неоправданной фрагментации памяти, естественно это отражается на RSS.
3 и 4. Да, вы правы, от ограничения CodeCache и Metaspace JVM не начнёт потреблять меньше памяти, поэтому они в разделе «ограничения», а не «оптимизации». Для нас основной вопрос был в том, есть ли смысл разрешать приложению потреблять 240 Мб, когда ему больше 32 не нужно. Так что речь тут речь в основном о рациональном использовании ресурсов (лимиты в cgroups можем выставить поменьше и знать точно, сколько каких контейнеров поместится в хост-машину). Ну и получить Java-ООМ приятнее, чем системный — не надо лишний раз гадать что израсходовало память (для полного счастья не хватает ExitOnFullCodeCache).
Вот это внимание к деталям! Спасибо, поправил.
Но лекциями мы не ограничиваемся. Лекции и не главное. Это вообще не самый подходящий формат для изучения программирования)
Главное — практика, на неё у ребят в среднем уходит не меньше 10-15 часов в неделю (во второй половине обучения больше).
Лекции нам скорее нужны, чтобы подтянуть средний уровень студентов, показать в какую сторону копать, подготовить к практике.
Наша же программа рассчитана таким образом, чтобы вслед за знаниями получить и опыт, а именно познакомить студентов с конкретными технологиями и процессом разработки в крупной компании. Здесь больше важна не теория, а практика: примеры использования, домашние задания и, в конце концов, применение в реальном проекте.