Как я могу измерить стек потоков depth?

У меня есть 32-разрядная служба Java с проблемами масштабируемости: при большом количестве пользователей у нас заканчивается память из-за чрезмерного количества потоков. В долгосрочной перспективе я планирую перейти на 64-разрядную версию и уменьшить количество потоков. соотношение на пользователя. В краткосрочной перспективе я хотел бы уменьшить размер стека (-Xss, -XX: ThreadStackSize), чтобы получить больше запаса. Но это рискованно, потому что, если я сделаю его слишком маленьким, я получит StackOverflowErrors.

Как Могу ли я измерить средний и максимальный размер стека для своего приложения, чтобы принять решение об оптимальном значении -Xss? Меня интересуют два возможных подхода:

  1. Измерение работающей JVM во время интеграционного тестирования. Какие инструменты профилирования будут сообщать о максимальной глубине стека?
  2. Статический анализ приложения ищет глубокие иерархии вызовов.Отражение при внедрении зависимостей делает маловероятным, что это сработает.

Обновление : Я знаю долгосрочный правильный способ решения этой проблемы. Сосредоточьтесь на вопросе, который я задал: как мне измерить глубину стека?

Обновление 2 : Я получил хороший ответ на связанный вопрос, в частности, о JProfiler: Может ли JProfiler измерить глубину стека? (я отправил отдельный вопрос в соответствии с рекомендациями сообщества JProfiler)

10
задан Community 23 May 2017 в 10:30
поделиться