 | Уровень сложности: простой Cлужба технической поддержки Java для AIX, специалист службы технической поддержки, IBM
23.04.2008 Хотите сэкономить немного времени? Эта статья содержит инструкции для поиска ошибок в коде Java™, работающем под управлением ОС IBM AIX®. В этой статье команда IBM Java Support on AIX Technical Team предоставит короткие, простые и подробные инструкции по сбору файлов дампа AIX и других файлов для анализа исключений, возникающих при работе Java-приложений на AIX. Также объясняется, как собрать и отправить данные в IBM Support.
Важное примечание
Эта статья предоставляется клиентам в качестве вспомогательного материала. Информация, содержащаяся в статье, предоставляется по принципу "как есть", без какой-либо гарантии или поддержки со стороны авторов. Содержимое этой статьи периодически обновляется на основе принципа наименьших затрат.
При необходимости можно получить подробную информацию касательно сопутствующей документации и инструментальных средств, используя следующие ссылки:
Введение
В этой статье представлены инструкции по сбору данных для отладки проблем на основе анализа дампа. Если выполнить описанные в этой статье процедуры перед обращением в центр поддержки, то решение проблемы будет получено быстрее, поскольку все данные будут уже собраны. Эти шаги включают в себя установку переменных среды AIX для включения возможности полного дампа (fullcore dump), настройку Java-кода для отключения обработки сигнала виртуальной Java-машиной (JVM), сбора файла дампа (core file) и остальных связанных библиотек.
Определим разумные ожидаемые результаты
Есть несколько причин, по которым Java-процесс может остановить свое выполнение:
- проблемы с обращением к памяти;
- неправильно скомпилированный платформенно-зависимый код;
- неправильная конфигурация;
- ошибки программного кода;
- ограничения в памяти.
Эти проблемы могут быть связаны с JVM-кодом (JIT), AIX (библиотеки) или другим платформенно-зависимым кодом.
Сбор информации может потребовать неоднократного воспроизведения проблемы для сбора и последующего удаления ненужных данных для идентификации и решения проблемы. Может оказаться, что достаточно только файла Javacore; в свою очередь, недостаток информации в этом файле может повлечь сбор дампов AIX и другой информации. Если проблема не может быть воспроизведена в тестовой лаборатории или среде разработки, возможно, понадобится собирать данные с производственной системы. Если данные не могут быть собраны с системы, на которой воспроизводится проблема, команда поддержки может оказаться неспособной решить ее.
Сбор данных в производственной среде может повлечь за собой простой приложения, что, в свою очередь, может повлиять на доход, стабильность и терпение клиентов. Однако команда поддержки прикладывает все усилия, чтобы уменьшить количество циклов сбора информации и пытается решать любые проблемы так быстро, как это возможно.
Важное замечание
Очень
важно ознакомиться со справочной информацией AIX Java (Java technology edition, см. раздел Ресурсы) для получения важных сведений о Java-технологии в AIX в применении к комплектам разработчика от IBM. Обратите особенное внимание на даты окончания обслуживания (End of Service) на главной странице и внимательно прочитайте правила и условия поддержки Java в AIX под таблицей с ссылками для загрузки.
Файл Javacore против файла дампа AIX
Файл Javacore является текстовым отображением Java-приложения в какой-то момент времени. Файл Javacore создается Java-процессом, когда:
- Пользователь выполняет команду
kill -3 для Java-процесса.
- Процесс прекращает свое выполнение из-за фатальной ошибки/исключения.
Для подробной информации по файлу Javacore ознакомьтесь с руководством IBM JVM Diagnostic Guide в разделе Ресурсы.
В некоторых ситуациях наличие коллекции файлов Javacore, сгенерированных одним и тем же процессом, может оказаться полезным для понимания особенностей выполнения приложения. В случае, если процесс зависает или достигает нестабильного состояния, он может оказаться неспособным создать файл Javacore.
Файл дампа AIX (AIX core) является двоичным отображением процесса в памяти в какой-то момент времени. Из дампа можно извлечь более подробную, нежели в Javacore, информацию, плюс к этому в дампе есть дополнительная информация о процессе, которая не отражается в Javacore. По этим причинам (в большинстве случаев) команды поддержки пользуются файлом дампа AIX, а не файлом Javacore.
Настройка операционной системы
По умолчанию файлы дампа (core file) создаются в рабочем каталоге процесса, для которого выполняется дамп. Но пользователь может сменить каталог по умолчанию для файлов дампа. Для отображения текущего хранилища файловых дампов нужно выполнить следующую команду:
Если читателю незнакомы команды, используемые в этой статье, то ему следует ознакомиться с библиотекой документации AIX в разделе Ресурсы.
При выполнении команд нужно заменить текст, набранный курсивом, на соответствующие значения, иначе могут возникнуть ошибки и неожиданные результаты.
Чтобы ОС AIX могла создавать полные файлы дампа, необходимо выполнить следующие шаги:
- Снять границы с пользовательского процесса, выполнив команду под учетной записью root:
chuser fsize=-1 data=-1 core=-1 user_id_running_application
|
В этой команде user_id_running_application - это имя пользователя, выполняющего Java-приложение. Для примера:
chuser fsize=-1 data=-1 core=-1 root |
Этот пример снимает ограничения с размера файла (fsize), размера дампа файла (core), размера памяти (data). С использованием этих параметров сопряжен определенный риск, поэтому как только необходимая информация будет собрана, необходимо восстановить исходные настройки. Как только изменения будут сделаны, следует удалить ссылки на команду ulimit из профиля пользователя и любых сценариев запуска при загрузке. Далее необходимо снова войти в систему под пользовательской учетной записью, чтобы перед запуском приложения совершить изменения в новом процессе. Без повторного входа в систему под пользовательской учетной записью изменения в ulimit могут остаться непрочитанными процессом, даже если перезапустить его. Кроме того, любое приложение, которое запускается из файла /etc/inittab или из демона cron, не должно быть способным прочитать изменение в ulimit, так что возможно придется использовать команду ulimit для изменения значения ulimit в сценарии запуска процесса, как то: ulimit -d unlimited для отключения предельного размера данных. Выполнение этих изменений уменьшит потребление ресурсов системой, которое ограничивало пользователя. Когда проблема будет решена, необходимо вернуть старые значения ulimit.
Проверить изменения можно, выполнив команду ulimit -a перед запуском Java-приложения.
- Активировать возможность создания полных дампов системой можно, выполнив следующую команду под учетной записью root:
chdev -l sys0 -a fullcore=true |
Это изменение не потребует перезагрузки системы. При наличии навыков работы с утилитой SMIT, данная настройка может быть изменена командой smitty chgsys, а затем следует присвоить Enable full CORE dumps значение true.
- Утилиту
syscorepath, поставляемую с AIX Version 5.2 и более поздними версиями, можно использовать для определения единственного для всей системы каталога, куда будут сохраняться все файлы дампа всех процессов. Все пользователи системы должны иметь права на чтение и запись в этот каталог. Если пользователь не имеет права на запись в этот каталог, файл дампа не будет создан. Файлам дампа, созданным в этом общем каталоге, будут даны уникальные имена, собранные из идентификатора процесса (PID) и времени, например, core.pid.MMddhhmmss, где pid является идентификатором процесса, MM месяцем, dd является днем месяца, hh является часом 24-часовом формате времени, mm - минуты и ss - секунды. Но мы не рекомендуем пользоваться этим методом. Синтаксис команды для этого метода:
syscorepath -p alternate_directory
|
- 8. Проверить каталог, владельца файла и права доступа для файла дампа можно командой:
Эта команда проверяет, имеет ли пользователь, выполняющий приложение, право осуществлять запись в текущий каталог. Если есть какие-то сомнения, во время выполнения пользовательского приложения из-под пользовательского аккаунта нужно выполнить следующую команду:
С помощью команды chmod или chown изменить владельца файла или права доступа соответственно или выполнить smitty user для модификации характеристик учетной записи пользователя. После выполнения модификаций учетной записи пользователя необходимо повторно войти в систему под этим пользователем.
- Убедиться, что для сохранения файла дампа присутствует достаточное количество дискового пространства. Файл дампа может быть таким же большим, как размер процесса в памяти. Для обеспечения подходящего размера файла дампа можно использовать поле размера процесса (RSS, process size)) из выходных данных команды
ps. Например:
Если необходимо дополнительное пространство, можно освободить память удалив нежелательные или старые файлы или увеличив размер целевой файловой системы.
- Для сбора информации используется набор команд или утилит AIX. Перед продолжением изучения статьи должны быть установлены следующие наборы файлов AIX:
File Fileset
--------------------------------------------------
/usr/bin/uudecode bos.net.uucp
/usr/bin/syscorepath bos.rte.control
/usr/sbin/snapcore bos.rte.serv_aid ( also /usr/bin/truss )
|
Чтобы убедиться, что все наборы файлов установлены правильно, нужно выполнить команду:
Любые пропущенные комплекты файлов должны быть установлены с инсталляционного диска AIX и затем обновлены до последней версии при помощи IBM Fix Central (см. раздел Ресурсы).
Отключение обработки сигналов Java
Как говорилось в разделе Файл Javacore против файла дампа AIX, файлы Javacore не всегда являются лучшими средствами для отладки зависших процессов. Двоичный файл дампа AIX может предоставлять больше полезной информации. Для получения хорошего файла дампа AIX виртуальная машина JVM должна быть настроена таким образом, чтобы она не создавала Javacore при получении сигнала, который был отправлен процессу.
Когда обработка сигналов не отключена, процесс может отобразиться с текущим статусом типа "обработка сигналов", что может скрыть реальную проблему. Если приложение имеет обработчики сигналов SIGILL, SIGFPE, SIGBUS и SIGSEGV, то эти обработчики сигналов должны быть отключены. Изменения должны быть сделаны в средах, в которых выполняется приложение, до его запуска.
Для ситуаций, в которых приложение запускается другим процессом, например, WebSphere®, настройка этой среды может повлиять на все Java-процессы. В этом случае необходимо изучить документацию приложения, что позволит настроить среду надлежащим образом под приложение:
- Отключение обработки сигналов в JVM.
Java142 и Java131:
Перед тем как приложение будет перезапущено, должны быть настроены следующие переменные окружения.
export DISABLE_JAVADUMP=true
export IBM_NOSIGHANDLER=true
|
Java5:
Для Java5 нет нужды присваивать значение двум предыдущим переменным окружения.
Когда запустится Java-процесс, то нужно, используя командную опцию Java -Xrs:all, отключить обработку сигналов в Java 5 JVM.
Для того чтобы это изменение вступило в силу, приложение надо перезапустить. Заметим, что эти действия предотвращают создание файлов Javacore и файла дампа динамической памяти (heapdump в дальнейшем) при выполнении команды kill -3 или при получении какого-либо другого сигнала, из-за которого процесс прекратил свое выполнение.
- Отключение обработки сигналов в приложении.
Если приложение обрабатывает сигналы SIGQUIT, SIGILL, SIGFPE, SIGBUS, SIGABRT, SIGSYS, SIGSEGV и другие, возможно, надо отключить обработчики этих сигналов.
Например, IBM MQ по умолчанию обрабатывает SIGILL, SIGFPE, SIGBUS и SIGSEGV. Для получения хорошего файла дампа MQ должен отключить обработчики этих сигналов, присвоив нужное значение переменным среды.
export MQS_NO_SYNC_SIGNAL_HANDLING=1
|
Примечание. Пожалуйста, согласуйте правильность этих изменений со службой поддержки MQ, так как MQ может изменяться время от времени.
Важно знать, обладает ли приложение обработчиком сигналов и как отключить их для создания файла дампа.
- Далее следует найти, где надо задавать переменные среды.
Переменные среды могут быть сконфигурированы в определенных местах, включая по необходимости:
- /etc/profile;
- /etc/csh.login;
- $HOME/.profile;
- $HOME/.cshrc;
- $HOME/.kshrc;
- конфигурационные сценарии и сценарии запуска приложений.
Однако мы не рекомендуем добавлять изменения в файле /etc/environment. Изменения, сделанные в конфигурационных сценариях и сценариях запуска приложений, перезапишут соответствующим образом все остальные файлы.
Сбор данных
Когда возникает проблемная ситуация, целью является сбор как можно большего количества информации, которая поможет либо определить причину проблемы, либо предоставить направление для поиска причины неисправности. Проблемой может являться операционная система (ядро/библиотека), JVM (или JIT), платформенно-зависимый код приложения от Java Native Interface (JNI) или JNI-код стороннего разработчика. Этот раздел содержит некоторые команды, которые собирают данные из каждой области. Большинство команд ниже должны выполняться из-под учетной записи root.
Сбор настроек операционной системы:
- После того как дамп был создан, нужно выполнить следующие команды:
errpt -a > errpt.out
lslpp -lc > lslpp.out
instfix -i > instfix.out
bootinfo -K > bootinfo.out
lsattr -El sys0 > lsattr.out
lsps -s > lsps.out
|
- Скомпоновать выходные файлы, выполнив следующие команды:
tar -cf - *.out | compress -c > sysinfo.tar.Z
|
- Собрать файл дампа и соответствующие библиотеки.
Если точное местоположение файла дампа неизвестно, то нужно использовать команду errpt -a | pg и найти записи, начинающиеся с LABEL: CORE_DUMP, раздел с именем CORE FILE NAME может указывать на расположение файла дампа.
Java131 и Java14
mv core core.001
javaLibsGrabber.sh core.001
compress core.001
|
Java5
mv core core.001
java5_install_directory/jre/bin/jextract core.001
Replace java5_install_directory with Java5 installation directory
such as:"/usr/java5/jre/bin/jectract core.001"
|
Загрузить утилиту javaLibsGrabber.sh
(см. раздел Ресурсы).
Проверить при помощи следующей команды, собирает ли javaLibsGrabber.sh библиотеки:
uncompress -c < core-libs.tar.Z | tar -tvf -
|
Если при выполнении javaLibsGrabber.sh или jextract происходит ошибка, то нужно использовать snapcore для сбора библиотек:
snapcore -d save_directory core.001 fullpath_executable
|
Например:
snapcore -d /tmp/savedir core.001 /usr/java14/jre/bin/java
Эта команда создает архив (snapcore_pid.pax.Z) в каталоге
/tmp/savedir.
Упаковка и отправка данных в IBM
Support
Ниже описана процедура сбора и отправки данных в службу поддержки IBM support:
- С помощью TAR создается архив файлов с именем xxxxx.byyy.czzz.#.tar. Например:
tar -cf xxxxx.byyy.czzz.#.tar sysinfo.tar.Z core.001.Z core-libs.tar.Z
optional-files |
или
tar -cf xxxxx.byyy.czzz.#.tar sysinfo.tar.Z snapcore_pid.pax.Z
optional-files |
Параметры имени расшифровываются так:
-
xxxxx - номер PMR;
-
yyy - код филиала организации;
-
zzz - код страны;
-
# - порядковый номер или дата, которые необходимы для гарантии того, что каждый файл, помещенный в испытательный сервер, является уникальным.
Перед отправкой файла нужно проверить, что архивный файл читается и содержит следующие файлы:
- sysinfo.tar.Z;
- core-libs.tar.Z or snapcore_pid.pax.Z;
- core.001.Z;
- Файлы, которые будут загружены на тестовый сервер IBM, должны обладать уникальным именем. Для обеспечения своевременного ответа от службы поддержки AIX необходимо следовать инструкциям ниже. Если при отправке данных на испытательные серверы возникли проблемы, нужно проверить настройки брандмауэра и прокси вашей локальной сети.
ftp testcase.boulder.ibm.com
login: anonymous
password: user@host.com
> cd /toibm/aix
> bin
> put xxxxx.byyy.czzz.#.tar
> quit
|
Необходимо связаться с IBM и получить номер PMR для xxxxx.byyy.czzz, отправив e-mail или позвонив на горячую линию IBM Support.
Ресурсы Научиться
Получить продукты и технологии
-
javaLibsGrabber.sh: утилита javaLibsGrabber.sh.(EN)(EN)
-
IBM trial software: ознакомительные версии программного обеспечения для разработчиков, которые можно загрузить прямо со страницы сообщества developerWorks.(EN)
Обсудить
Об авторе  | |  | Этот документ был создан бывшими членами команды технической поддержки Роджером Лейаки (Roger Leuckie), Дауном Паттерсоном (Patterson), Джасоном Ченгом (Jason Cheng) и Ражеев Паланки (Rajeev Palanki). Текущая версия этого документа была обработана и обновлена командой поддержки языка Java в AIX (IBM ztrans Java Support team). Обновление основано на постоянных изменениях, происходящих в AIX и JVM. Если у вас есть предложения или комментарии, связаться с техническим начальником команды можно по адресу электронной почты weiluo@us.ibm.com. |
Выскажите мнение об этой странице
|  |