Подтвердить что ты не робот

JSTACK и недостаточно памяти для обработки этой команды

Я пытаюсь запустить jstack-команду в своем приложении java. Приложение довольно большое, работает внутри jboss AS, занимая около 4 ГБ памяти. ОС - стандартная версия Windows Server 2003. Каждый раз, когда я получаю сообщение об ошибке "Недостаточно памяти для обработки этой команды". Существует достаточно RAM, 16GB и дискового пространства. Итак, какие-нибудь идеи?

4b9b3361

Ответ 1

Я столкнулся с этим недавно на Win2008r2 и подумал, что поделюсь своим решением, так как потребовалось некоторое время, чтобы разобраться. Комментарий Роба о psexec -s - это то, что я сделал для меня.

Похоже, что в Vista и более поздних версиях jstack не работает с сервисами из-за контекста пользователя. Это не имеет ничего общего с памятью. Я подозреваю, что это по той же причине, что люди видели эту проблему в 2003 году с помощью удаленного рабочего стола, если вы не используете переключатель /admin или/console на mstsc. Что касается Vista, то ужесточенная безопасность, вероятно, нарушила ее.

Запуск моего приложения из cmd-окна работал нормально, но это не помогло мне отладить нашу стандартную установку. Включение порта отладки java (для VisualVM, Eclipse или большинства отладчиков Java) требует перезагрузки приложения, поэтому вы теряете состояние, которое, вероятно, пытаетесь захватить, если у вас еще нет отладки. Запуск службы по моим учетным данным пользователя не помог - я был немного удивлен этим. Но psexec -s запускает jstack из контекста системы, который работал как шарм. О, и вам нужно будет запустить psexec из приглашения с повышенным cmd, если UAC включен.

Ответ 2

В прошлом я видел это, когда JVM работает как служба Windows в Windows 2003.

Сначала проверьте, является ли это с каталогом TMP.

Во-вторых, jstack (или другие утилиты, такие как jconsole) не будет подключаться к локальному процессу, если он не работает в том же сеансе. Если служба работает как конкретный пользователь, вы можете подключиться, войдя в один сеанс. Если вы используете Remote Desktop, вы можете подключиться с помощью "mstsc/admin" (используется для/консоль) и попробуйте снова запустить jstack. Определенно проверьте, правильно ли установлен каталог TMP, если это не устраняет проблему.

Если служба работает как LocalSystem, описанная выше процедура, вероятно, не поможет. Я не знаю, есть ли способ войти в тот же сеанс, что и LocalSystem.

Некоторые другие альтернативы могут состоять в том, чтобы настроить процесс удаленного мониторинга и использовать jvisualvm (от самого сервера или другого компьютера) для подключения по порту и создания дампа потока.

Ответ 3

У нас были проблемы с запуском JStack на Windows-машине с даже скромным приложением (1 ГБ). Мы закончили анализ нашего стека и кучи, используя Netbeans. Это, похоже, намного лучше справляется с анализом файлов дампа. YMMV.

Дайте Netbeans попробовать для профилирования - это очень хорошо. Обратите внимание, что VisualVM является профилировщиком NB и имеет 6u7.

Ответ 4

psexec -s jstack PID >> c:\jstack.log отлично работает на одной машине. В первый раз это заняло некоторое время, но снова я выполнил с параметром redirect to file, который завершился через несколько секунд.

Ответ 5

Это сообщение об ошибке из базового O/S. Там не так много, что вы можете сделать в своем коде, чтобы справиться с этим, кроме как поймать исключение, которое выбрасывается. Boo для Windows для того, чтобы быть настолько ограниченным.

http://technet.microsoft.com/en-us/library/cc978735.aspx