Могу ли я запустить Tomcat в качестве службы для сброса кучи? - PullRequest
10 голосов
/ 31 января 2010

Я пытаюсь, чтобы Tomcat, который в настоящее время работает в качестве службы на Windows 2003, сбросил кучу на OutOfMemoryError.

(Tomcat работает с Hudson, который сообщает о проблеме с пространством кучив конце моей сборки. Запуск сборки вручную не приводит к такой ошибке. Ребятам из Хадсона нужен дамп кучи, чтобы начать работу.)

Как указано в другом месте, я сказал Apache Service Monitor, чтобы настроитьJVM, которую он использует для запуска Tomcat для выгрузки кучи, когда встречается OutOfMemoryError, добавляя следующие параметры JVM: -XX: + HeapDumpOnOutOfMemoryError Затем я снова запускаю сборку.Конечно же, он сообщает, что произошла ошибка кучи.Я сканирую весь диск в поисках файла java_pid123.hprof по умолчанию (где, очевидно, 123 заменяется PID JVM)..hprof файлов нигде не существует.

Я пойман на улове 22: Мне нужны дампы кучи для парней из Хадсона, чтобы исправить утечку памяти, но я не могу получить дамп кучи, если запустил Hudsonпод Tomcat.

Есть ли какой-то особый способ, когда Tomcat работает как служба Windows, чтобы получить дамп кучи из него на OutOfMemoryError?

Другая вещь, которую я пробовал, состоит в том, чтобыскажите ему на вкладках «Запуск» и «Выключение» использовать параметр «Java» вместо параметра «jvm».Я считаю, что это должно сказать Service Manager, чтобы он пытался запустить Tomcat с помощью исполняемой команды Java вместо непосредственного запуска jvm.dll.Когда я это сделаю, служба не запустится.

Конечно, у кого-то еще была подобная проблема?

Ответы [ 7 ]

6 голосов
/ 10 февраля 2010

После того, как я, наконец, уложил его в постель, я хотел ответить на этот вопрос для тех, у кого может быть такая же проблема.

Во-первых, если вы устанавливаете Tomcat в Windows, не используйте установщик .exe, даже если он поддерживается Apache. Это не позволит вам запустить Tomcat как что-либо кроме системной учетной записи, независимо от того, что вы делаете. Похоже, что системная учетная запись не имеет прав для записи .hprof файлов в текущем каталоге, и никакие настройки безопасности Windows не устраняют эту проблему.

ОК, значит, вы установили Tomcat из дистрибутива .zip. Установите его как службу, используя скрипт service.bat. Убедитесь, что он настроен на работу от имени конкретного пользователя, созданного вами специально для этой цели. Также убедитесь, что папка, в которую вы хотите, чтобы Tomcat записывал в случае дампа кучи, была доступна для записи для этого пользователя.

Отредактируйте файл service.bat, включив параметры -XX:+HeapDumpOnOutOfMemoryError и -XX:HeapDumpPath=C:\whatever в правильном месте (где вы можете разместить параметры JVM). Это должно сработать.

2 голосов
/ 31 января 2010

Вы пробовали опцию -XX: HeapDumpPath?

http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

1 голос
/ 01 февраля 2010

Я нашел следующую ссылку, которая описывает, как настроить службу Tomcat (включая настройку параметров Java). Не уверен, относится ли это к используемой версии.

http://tomcat.apache.org/tomcat-5.5-doc/windows-service-howto.html

0 голосов
/ 21 декабря 2016

Когда Java-процесс работает как оконная служба, вы можете сгенерировать heapdump, используя следующие шаги:

  1. Запуск командной консоли от имени администратора.
  2. версия JDK (для команды jmap) и JRE (среда выполнения приложения Java) должны совпадать.
  3. Получить PID нет запущенного процесса окна для этого Java-приложения из диспетчера задач
  4. Выполнить ниже команду

jmap -dump: file = d: \ heapdump \ myHeapDump.hprof -F # PID_No #

Если есть какие-либо исключения с JDK / JRE 7, попробуйте то же самое с JDK / JRE 8 На самом деле я столкнулся с некоторой проблемой в jmap с JDK 7, но когда я перешел на JDK 8, я смог успешно сгенерировать дамп кучи с помощью той же команды

0 голосов
/ 15 марта 2013

если вы установили tomcat с помощью .exe, вы можете настроить службу tomcat на использование учетной записи, отличной от учетной записи локальной системы, и назначить права этого пользователя в каталоге "c: \ what", где вы создаете файл дампа. Помните, что служба Tomcat не запускается с учетной записью с правами администратора. поэтому создайте простого пользователя в windows (член группы пользователей) и настройте сервисы tomcat на использование этой учетной записи. и предоставьте этому пользователю права на каталог "c: \ what". Это решает проблему с правами на каталог пользователя, но вам нужно настроить tomcat для ошибок дампа памяти.

0 голосов
/ 31 января 2010

Из 20 советов по использованию Tomcat в производстве

Добавьте следующее в свой JAVA_OPTS в catalina.sh (или catalina.bat для Windows): - XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/j2ee/heapdumps

0 голосов
/ 31 января 2010

Файлы .hprof выгружаются в текущем каталоге. То, что это означает для службы Windows, можно только догадываться, если предположить, что это что-то значит.

Я предлагаю опубликовать новый вопрос (на http://superuser.com) спрашиваю, что означает «текущий каталог» для службы Windows.

...