Использует ли OpenJDK Hotspot Hotspot JVM эргономику для определения количества служебных потоков (соблюдайте ограничения докеров докеров) - PullRequest
0 голосов
/ 27 марта 2019

Возможно, я неправильно формулирую заголовок этого вопроса, поэтому, возможно, лучше начать с наблюдаемого поведения.

Я установил предел PID, используя docker-compose из 120 PIDS для изображения на основе Java. Чтобы быть точным adoptopenjdk/openjdk11:jdk-11.0.2.9-alpine-slim

120 был немного произвольным в том смысле, что все, что я делал, это использовал docker stats, чтобы посмотреть на 20 бегущих изображений и отметить, что у них в то время все PID составляли <100, и я дал еще 20 в качестве запаса. </p>

С тех пор я наблюдал некоторое поведение, когда происходят подобные ошибки:

вызвано: java.lang.OutOfMemoryError: невозможно создать собственный поток: возможно, недостаточно памяти или достигнут предел процесса / ресурса

и docker stats показывают использование памяти около 80%, например:

301,8 МБ / 376 МБ 80,26% от используемой памяти

но принципиально 120 pids.

Теперь мне интересно несколько вещей:

  1. я просто установил 120 слишком низко, и если это так, то что разумно - может сильно зависеть от моего конкретного случая использования, такого как размеры пула потоков, одновременные запросы и активность GC и т. Д. Но если это так, то какой способ лучше всего измерить - возможно, измерить активность PIDS в течение недели или двух и установить уровень немного выше, чем макс.
  2. Знает ли JVM о применяемом в настоящее время пределе PIDS, может ли эргономика виртуальной машины даже определить этот предел и узнать, может ли виртуальная машина создавать больше потоков или есть флаги, которые могли бы сообщить об этом. Если это даже может сделать это, это фундаментально что-то изменит, например, ВМ была бы более консервативна в отношении количества потоков, которые она пытается начать выполнять, например, GC или JIT, или для внутреннего обслуживания?
...