В производственной среде, мы не можем пройти точку останова отладки, новый журнал, средства визуализации, чтобы сразу же просмотреть текущее рабочее состояние и получить сообщение об ошибке, на этот раз, с Java поставляется с инструментами командной строки, а также связанные с ними инструменты анализа дампа, а также некоторыми небольшие советы, которые могут значительно повысить эффективность нашего исследования проблемы
Рабочие параметры
Ниже перечислены некоторые из общей и очень эффективной команды и параметров , чтобы просмотреть информацию о программе Java работает, чтобы помочь вам понять выполнение процедуры. Есть большое количество функций , обеспечиваемых другими доступными параметрами, считаем себя оракулом документацией
Аргументы Просмотр виртуальной машины Java
jps -l
Посмотреть все программы Java, работающих одновременно отображать начинают имя класса класса, добраться до PID
1 4706 org.apache.catalina.startup.Bootstrap 2 5023 sun.tools.jps.Jps
jinfo -flags PID
Просмотр параметров времени выполнения виртуальной машины Java и параметры процесса
1 Установка для обработки ID 28987 , пожалуйста , подождите ... 2 Debugger прилагается успешно. 3 обнаружен компилятор сервера. 4 JVM версии 25.171- b11 5 Non- по умолчанию VM флаги: -XX: CICompilerCount = 3 -XX: InitialHeapSize = 132120576 -XX: MaxHeapSize = 2092957696 -XX: MaxNewSize = 697303040 -XX: MinHeapDeltaBytes = 524288 -XX: NewSize = 44040192 -XX: OldSize = 88080384 -XX: + UseCompressedClassPointers -XX: + UseCompressedOops -XX: + UseParallelGC 6 Командная строка: -Dspring.config.location = application.properties -Dspring.profiles.active = постановка
java -XX:+PrintFlagsFinal -version
Просмотр текущих параметров виртуальной машины Java виртуальной машины по умолчанию
Просмотр в режиме реального времени GC статус
jstat -gc PID 1000 10
Просмотр дс информации в секунду, в общей сложности 10 раз
Разъяснение больше выходных параметров, причем каждое опорное поле https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
1 S0C S1C S0U S1U ЕС Инк OC МУ или МС КТС CCSU YGC GCT YGCT ФСК GCTF 2 512,0 512,0 15,3 0,0 4416,0 1055,2 11372,0 7572,5 14720,0 14322,5 1664,0 1522,8 40 0,137 8 0,039 0,176
Может столкнуться во время быстрой sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 24.181-b01. Target VM is 25.171-b11
задачи , поскольку установлены несколько версий, использование which
, ls -l
может быть расположены в одной и тот же профиль исполняемого в данный момент Java программа Java версию
расследование ошибок
Проблемы с памятью
Утечки памяти вызывают OOM? Необычно высокое потребление памяти? Это производственная среда настолько часто проблема, Java предоставляет файл дамп для нас того, что произошел в записанной памяти, необходимо использовать некоторые инструменты, из которых можно получить ценную информацию.
Экспорт файла дампа
- Заранее программы Java плюс этих параметров печататься файл дампа
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
- Для запуска программы с использованием jmap :
jmap -dump:format=b,file=heap.hprof PID
Анализ дампа файла
Если файл дампа не слишком велик, он может распространиться на http://heaphero.io/index.jsp анализировать
Файлы большие, и вы хотите провести более систематический анализ, рекомендуемый MAT анализ, существует несколько общих Просмотр
- Home] в [Leak Подозреваемых может выяснить, где проблема
- Нажмите [Создать гистограмму из произвольного набора объектов, найденных в числе всех объектов]
- Щелкните правой кнопкой мыши на объекте [Merge Кратчайшие к GC Roots] -> [исключить все / слабые / мягкие ссылки и т.д. фантомные] может запросить объект с большим количеством ссылок, которые GC ROOT
Проблемы многопоточности
Задача в течение длительного времени не снимать? загрузка процессора слишком высока? Вероятно, из-за бесконечный цикл или тупика, ведущий некоторые темы были выполнены без перерыва, но ошибка не является наиболее раздражающей, так журналы не могут увидеть сообщение об ошибке, но и не файл дамп и анализа, потому что ничего не делать с памятью. На этот раз нам нужно использовать инструменты анализа нити, чтобы помочь нам.
Файл jstack Экспорт
Используйте , jstack PID > 文件
если это не удается , пожалуйста , добавьте -F
параметры, если это не удается, используйте пользователь использовать программу Java начинает выполнение jstack, следующая часть выходного формата jstack
1 线程名ПИД的16进制 2 "HTTP-NiO-8080-акцептор-0" # 17 демон PRIO = 5 os_prio = 0 TID = 0x00007fac2c4bd000 NID = 0x29f4 работоспособной [0x00007fac192f6000 ] 3 java.lang.Thread.State: Runnable ( кот的工作线程正在运行,有NEW / Runnable / BLOCKED / ОЖИДАНИЕ / TIMED_WATING / TERMINATED状态) 4 в sun.nio.ch.ServerSocketChannelImpl.accept0 (нативный метод) 5 в sun.nio.ch.ServerSocketChannelImpl.accept (ServerSocketChannelImpl. Java: 422 ) 6 в sun.nio.ch.ServerSocketChannelImpl.accept (ServerSocketChannelImpl.java:250 ) 7 - заблокирован <0x00000000faf845a8> (а java.lang.Object) 8 в org.apache.tomcat.util.net.NioEndpoint $ Acceptor.run (NioEndpoint.java:682 ) 9 в java.lang.Thread.run (Thread.java:748)
выход jstack может видеть все потоки и их состояние, мы можем увидеть , какие потоки работают наши собственные создали, то, вероятно , что нити были выполнены, на этот раз название нити это особенно важно, рекомендуется указать значимое имя нити при создании нового потока. Конечно, смотрите через PID также очень удобно.
действия по устранению неполадок
top
Просмотр Java программа, которая при высокой нагрузкеtop -p PID -H
Просмотр состояния всех процессов процесс, работающих под управлением- При высокой нагрузке записи ID потока,
printf "&x" PID
преобразуется в шестнадцатеричное jstack PID > 文件
- Переоборудовано в потоке поток ID запроса работает стек после шестнадцатеричного файла с jstack
- От того, где стек нити узнала в реализации каких задач, в сочетании с кодом делового суждения