hsperfdata user что это

Как я могу запретить Java создавать файлы hsperfdata?

Я пишу Java-приложение, которое работает на Linux (используя JDK Sun). Он продолжает создавать /tmp/hsperfdata_username справочники, которые я хотел бы предотвратить. Есть ли способ остановить java от создания этих файлов?

8 ответов

Это не будет иметь отрицательного влияния на производительность, как говорят некоторые другие ответы.

поэтому недостаток выключение приборов jvmstat, что вы теряете производительность мониторинговая информация.

вместо того, чтобы выключать его, измените java.Ио.расположение tmpdir. Добавить-Djava.Ио.никакое сжатие=/mydir/где-то/еще/ в Java-команд и тогда файл будет где-то под вашим контролем.

обратите внимание на комментарий @simonc: это работает только в нескольких версиях JVM и больше не поддерживается. См.http://bugs.sun.com/view_bug.do?bug_id=6447182, http://bugs.sun.com/view_bug.do?bug_id=6938627, http://bugs.sun.com/view_bug.do?bug_id=7009828 для получения дополнительной информации.

по словам подано сообщение об ошибке есть обходной путь:

стоит отметить, что это функция, а не ошибка. Вышеуказанная работа просто отключает функцию.

EDIT: очистка информации и суммировать

в качестве дополнения к ответу Мака (ответил 25 марта ’11 в 17:12), опция java.ПТМ.dir больше не доступен с Java 8. См. информацию по адресу:https://bugs.java.com/view_bug.do?bug_id=8189674

таким образом, отключение опции с помощью-XX:-UsePerfData кажется единственным вариантом не иметь hsperfdata_* файлов.

Источник

В поисках перформанса, часть 2: Профилирование Java под Linux

Бытует мнение, что бесконечно можно смотреть на огонь, воду и то, как другие работают, но есть и ещё кое-что! Мы уверены, что можно бесконечно говорить с Сашей goldshtn Гольдштейном о перформансе. Мы уже брали у Саши интервью перед JPoint 2017, но тогда разговор касался конкретно BPF, которому был посвящен доклад Саши.

На этот раз мы решили копнуть глубже и узнать фундаментальные проблемы мониторинга производительности и варианты их решения.

С чего стоит начинать

— В прошлый раз мы довольно подробно поговорили про BPF и вскользь обсудили проблемы мониторинга производительности Java под Linux. В этот раз хотелось бы сконцентрироваться не на конкретном инструменте, а на проблемах и поиске решений. Первый вопрос, довольно банальный, — как понять, что с производительностью есть проблемы? Следует ли думать об этом, если пользователь не жалуется?

Саша Гольдштейн: Если начинать думать о производительности только в момент, когда ваши пользователи жалуются, с вами они будут недолго. Для многих инженерия производительности — это траблшутинг и crisis mode. Телефоны звонят, свет мигает, система упала, клавиатура горит — обычные трудовый будни перформанс-инженера. В реальности же они проводят большую часть своего времени, планируя, проектируя, мониторя и предотвращая кризисы.

Для начала, capacity planning — оценка ожидаемой нагрузки системы и использования ресурсов; проектирование масштабируемости поможет избежать узких мест и получить значительные увеличения в нагрузке; инструментирование и мониторинг жизненно необходимы для понимания того, что происходит внутри системы, чтобы не копаться вслепую; благодаря установке автоматического оповещения вы точно будете знать о любых возникающих проблемах, как правило ещё до того, как пользователи начнут жаловаться; ну и конечно же будут единичные кризисы, решать которые придётся в стрессовых условиях.

Стоит отметить, что тулы постоянно меняются, но сам процесс остаётся неизменным. Приведу пару конкретных примеров: capacity planning вы можете сделать и на бумажке на коленке; можно использовать APM-решения (как New Relic или Plumbr) для end-to-end инструментирования и мониторинга, AB и JMeter для быстрого нагрузочного тестирования и так далее. Чтобы узнать больше, можно почитать книгу Брендана Грегга «Systems Performance» — это отличный источник по теме жизненного цикла и методологии перформанса, а «Site Reliability Engineering» от Google освещает тему установки характеристик производительности (Service Level Objectives) и их мониторинга.

— Допустим, мы поняли, что проблема есть: с чего начинать? Мне часто кажется, что многие (особенно не профессиональные перформанс-инженеры) сразу готовы расчехлять JMH, переписывать всё на unsafe и «хакать компиляторы». Потом смотреть, что получилось. Но ведь в реальности лучше не с этого начинать?

Саша Гольдштейн: Это довольно распространённая практика, когда при написании кода и проведении базовых тестов профайлера возникают проблемы с перформансом, которые можно легко исправить, поменяв код или «хакнув компиляторы». Однако на проде, исходя из моего опыта, это делается не так часто. Многие проблемы присущи только какой-то одной среде, вызваны меняющимися паттернами рабочей нагрузки или связаны с узкими местами вне кода вашего приложения, и лишь малую часть можно замикробенчмаркать и улучшить на уровне исходного кода «умными» хаками.

Читайте также:  mitsubishi heavy что это

Вот пара примеров для иллюстрации:

— Наверняка следует сначала посмотреть, как приложение/сервис работает в продакшне. Какие инструменты ты для этого рекомендуешь, а какие — не очень?

Саша Гольдштейн: Мониторинг и профайлинг на проде — это набор инструментов и техник.

Начинаем с метрик высокоуровневого перформанса, фокусируясь на использовании ресурсов (процессор, память, диск, сеть) и характеристике нагрузки (# запросов, ошибок, типов запросов, # запросы к базе данных). Есть стандартные тулы для получения этих данных для каждой операции и времени выполнения. К примеру, на Linux обычно используют инструменты вроде vmstat, iostat, sar, ifconfig, pidstat; для JVM используют JMX-based тулы или jstat. Это метрики, которые можно непрерывно собирать в базу данных, возможно с 5-ти или 30-ти секундным интервалом, чтобы можно было проанализировать скачки и при необходимости вернуться в прошлое, чтобы скоррелировать предыдущие операции по развёртыванию, релизы, мировые события или изменения рабочей нагрузки. Важно, что многие фокусируются на собирании только средних показателей; они хоть и хороши, но, по определению, не представляют полное распределение того, что вы измеряете. Гораздо лучше собирать процентили, а по возможности даже и гистограммы.

Следующий уровень — это операционные метрики, которые обычно нельзя непрерывно собирать или хранить долгое время. Они включают в себя: лог сбора мусора, запросы сети, запросы к базе данных, классовые нагрузки и так далее. Разобраться в этих данных после того, как их где-то хранили, иногда гораздо труднее, чем, собственно, их собирать. Это позволяет, однако, задавать вопросы, вроде «какие запросы работали, пока нагрузка ЦП базы данных повышалась до 100%» или «какими были IOPS дисков и время отклика во время выполнения этого запроса». Одни лишь числа, особенно в виде средних показателей, не позволят вам провести подобного рода исследование.

И наконец, «хардкорный» уровень: SSH в сервере (или удаленный запуск тулов) для сбора большего количества внутренних метрик, которые нельзя хранить во время штатной работы сервиса. Это инструменты, которые обычно называют «профайлерами».

Для профайлинга Java-продакшна существует множество жутких тулов, которые не только дают большой оверхэд и задержки, но могут ещё и лгать вам. Несмотря на то, что экосистеме уже около 20 лет, есть лишь несколько надёжных профайлинговых техник с низким оверхэдом для JVM-приложений. Я могу порекомендовать Honest Profiler Ричарда Ворбертона, async-profiler Андрея Паньгина и, конечно, моего любимчика — perf.

Кстати, много тулов фокусируются на профайлинге процессора, разбираясь в том, какой путь выполнения кода вызывает высокую загрузку ЦП. Это здорово, но часто проблема не в этом; нужны инструменты, которые могут показывать пути выполнения кода, ответственные за распределение памяти (async-profiler теперь может делать и это), ошибки отсутствия страницы, непопадание в кэш, доступы к диску, запросы сети, запросы к базе данных и другие события. Меня в этой области привлекла именно проблема поиска правильных перформанс-тулов для исследования работающей среды.

Профилирование Java под Linux

— Я слышал, что под Java/Linux стек есть куча проблем с достоверностью замеров. Наверняка с этим можно как-то бороться. Как ты это делаешь?

Саша Гольдштейн: Да, это печально. Вот как выглядит текущая ситуация: у вас есть быстрая конвейерная линия с огромным количеством разных частей, которые нужно протестировать, чтобы найти дефекты и понять скорость приложения/сервиса. Вы не можете проверить абсолютно каждую часть, поэтому ваша основная стратегия — это проверять 1 часть в секунду и смотреть, всё ли в порядке, и вам нужно это делать через «крохотное окно» над этой «лентой», потому что подходить ближе уже опасно. Вроде неплохо, не так ли? Но потом оказывается, что когда вы пытаетесь в него посмотреть, оно показывает вам не то, что происходит на конвейере прямо сейчас; оно ждёт, пока конвейер перейдёт в волшебный «безопасный» режим, и только после этого даёт вам всё увидеть. Также оказывается, что многих частей вы не увидите никогда, потому что конвейер не может войти в свой «безопасный» режим, пока они рядом; и ещё оказывается, что процесс поиска дефекта в окошке занимает целых 5 секунд, так что делать это каждую секунду невозможно.

Читайте также:  что делать если задерживают вылет

Примерно в таком состоянии сейчас находится множество профайлеров в мире JVM. YourKit, jstack, JProfiler, VisualVM — у всех у них одинаковый подход к профайлингу ЦП: они используют семплинг потоков в безопасном состоянии. Это значит, что они используют документированный API, чтобы приостановить все JVM-треды и взять их стек-трейсы, которые затем собирают для отчёта с самыми горячими методами и стеками.

Проблема такой приостановки процесса заключается в следующем: треды не останавливаются сразу же, рантайм ждёт, пока они не дойдут до безопасного состояния, которое может находиться после множества инструкций и даже методов. В результате вы получаете необъективную картину работы приложения, а разные профайлеры могут ещё и не соглашаться друг с другом!

Есть исследование, показывающее, насколько это плохо, когда у каждого профайлера своя точка зрения по поводу самого горячего метода в одной и той же рабочей нагрузке (Миткович и соавт., «Evaluating the Accuracy of Java Profilers»). Более того, если у вас есть 1000 тредов в сложном стеке вызовов Spring, часто собирать стек-трейсы не получится. Возможно, не чаще 10 раз в секунду. В результате ваши данные по стекам будут отличаться от фактической рабочей нагрузки ещё больше!

Решать такие проблемы непросто, но вкладываться стоит: некоторые рабочие нагрузки на проде невозможно профилировать, используя «традиционные» тулы вроде перечисленных выше.

Существует два раздельных подхода и один гибридный:

Профилирование в контейнерах

— К слову об окружениях, сейчас модно всё паковать в контейнеры, здесь есть какие-то особенности? О чём следует помнить, работая с контейнеризованными приложениями?

Саша Гольдштейн: С контейнерами возникают интересные проблемы, которые многие тулы полностью игнорируют и в результате вообще перестают работать.

Вкратце напомню, что контейнеры Linux построены вокруг двух ключевых технологий: группы контроля и пространства имён. Группы контроля позволяют увеличить квоту ресурсов для процесса или для группы процессов: CPU time caps, лимит памяти, IOPS хранилища и так далее. Пространства имён делают возможной изоляцию контейнера: mount namespace предоставляет каждому контейнеру свою собственную точку монтирования (фактически, отдельную файловую систему), PID namespace — собственные идентификаторы процессов, network namespace даёт каждому контейнеру собственный сетевой интерфейс и так далее. Из-за пространства имён множеству тулов сложно правильно обмениваться данными с контейнезированными JVM-приложениями (хотя некоторые из этих проблем свойственны не только JVM).

Прежде чем обсудить конкретные вопросы, будет лучше, если мы вкратце расскажем о разных видах observability тулов для JVM. Если вы не слышали о некоторых из них, самое время освежить ваши знания:

Мы хотели продолжить разговор и обсудить влияние железа на профилирование…

Совсем скоро Саша приедет в Санкт-Петербург, чтобы провести тренинг по профилированию JVM-приложений в продакшне и выступить на конференции Joker 2017 с докладом про BPF, поэтому, если вы хотите погрузиться в тему глубже – у вас есть все шансы встретиться с Сашей лично.

Источник

Hsperfdata user что это

Всем привет! Дали мне ноутбук, мол, я разберусь, что с ним такое.

Вообщем из программ, использующих Интернет, запускается только IEx64 (именно x64, 32 битная версия также выдает ошибку) и то, без вывода изображения на экран (т.е. курсор распознает ссылки, поля ввода и т.д.). WinRAR, элементы Панели управления, не включенные в explorer.exe, и антивирусы тоже не запускается.

Проверил реестр, чисто. Переустановил Оперу, не сработало. Ппытался стереть Temp, все стерлось, кроме о-о-очень подозрительного файла fxsapidebuglogfile.txt (регистр не учел). Обыскал Гугл, ничего дельного о нем не нашел. Файл пустой, при попытке удаления пишет, что его использует Проводник.

Здеся мне кажется, вируснячок. Потому что у меня при удалении файла никогда ошибки с отсылкой на Проводник никогда не было. Значит, Проводник заражен. Unlocker’ом спастись не смог, установщику также, как и браузерам, и WinRAR’у, было отказано в доступе.

ОС Windows 7 Ultimate (Build 7601)
Ноут Lenovo (какой именно, не знаю, Диспетчер устройств без всяких ошибок отказывается запускаться нормальным образом)

Собственно, жду ваши советы по лечению ноутбука.

Прошу не предлагать что нибудь вроде «Переустанови винду» или «Скачай то-то то-то». Запускать что либо новое винда отказывается.

Читайте также:  какой номер у дембеле в барсе

Заранее спасибо!

Источник

Русские Блоги

Изучение Java jmap-команд

Java дамп обучения

Ссылочный блогСпасибо оригинальному автору Hoils

Снимок запущенной виртуальной машины Java, сохранение состояния и информации о запущенной виртуальной машине Java в файл, в основном разделенный на два типа
— дамп потока, включая текущее состояние всех потоков.Текстовый формат
-Heap Dump, который содержит поток Dump и содержит состояние всех объектов кучи.Бинарный формат.

Способ сделать Java-дамп

функция

Реализация низкого уровня

Описание параметра

Причины сбоя jps

Суммируйте причины: jps читает только из каталога / tmp. Возможно, мы установили параметр виртуальной машины (-Djava.io.tmpdir). Также может быть, что у нас нет разрешения на чтение этого файла в системе Linux, или каталог / tmp ясно

jstack

функция

jstack используется для создания снимка потока текущей виртуальной машины Java. Моментальные снимки потоков представляют собой набор стеков методов, выполняемых каждым потоком в текущей виртуальной машине Java.Основной целью создания моментальных снимков потоков является обнаружение причин длительных пауз в потоках, таких как взаимные блокировки между потоками, бесконечные циклы и длинные запросы внешних ресурсов. Время ждать и т.д. Используйте jstack для просмотра стека вызовов каждого потока, когда поток приостановлен

Несколько состояний потоков и базовых знаний

Область ввода (Entrt Set): указывает, что поток запрашивает получение блокировки объекта посредством синхронизации. Если объект не заблокирован, вводится владелец, в противном случае он ожидает в области входа. Как только блокировка объекта снята другими потоками, она немедленно участвует в соревновании.

Владелец (Owner): указывает, что поток успешно конкурирует за блокировку объекта.

Зона ожидания (Wait Set): указывает, что поток снимает блокировку объекта с помощью метода wait объекта и ожидает пробуждения в зоне ожидания.

Как видно из рисунка, монитор может принадлежать только одному потоку за раз. Этот поток является «активным потоком», в то время как другие потоки являются «ожидающим потоком». Они находятся в двух очередях: «Entry Set» и « Подождите, установите «. Состояние потока, ожидающее в «Набор ввода», равно «Ожидание записи монитора», а состояние потока, ожидающее в «Набор ожидания», равно «в Object.wait ()». Сначала посмотрите на темы в «Entry Set». Мы называем секцию кода, защищенную синхронизацией, критической секцией. Когда поток запрашивает вход в критическую секцию, он попадает в очередь «Entry Set».

parking to wait for

Несколько ситуаций, когда ресурсы потоков заблокированы

Состояние потока ЗАБЛОКИРОВАНО, ожидание действия потока при вводе монитора (первая строка), оформление вызова, ожидающее блокировки, всегда отображаются вместе. Указывает, что конфликтующий вызов уже существует на уровне кода.
-блок синхронизации

Можно видеть, что и blockee-11, и blockee-86 «ожидают и ожидают в очереди на вход монитора.

операция jmaps

Вы также можете удаленно отладить серверную команду jmap [option] [server_id @]

параметры

печатаю однуКуча сводной информации Включает используемый алгоритм GC, информацию о конфигурации кучи и мудрое использование кучи.

резюме

Источник

Как я могу запретить java создавать файлы hsperfdata?

Обновлено: информация об очистке и обобщение

Внизу страницы представлено решение, которое действительно работает.

Исправлена ​​ссылка «подробнее».

Я не могу найти документы на сайте Oracle. Здесь что-то есть: oracle.com/technetwork/java/jvmstat-142257.html, но это бесполезно. Если кто-нибудь сможет обновить ссылку, было бы здорово.

Согласно поданный отчет об ошибке есть обходной путь:

This undocumented option will disable the perfdata feature:
-XX:-UsePerfData

Стоит отметить, что это функция, а не ошибка. Вышеупомянутый обходной путь просто отключает эту функцию.

«что должно вызывать меньше проблем с производительностью». Интересно, а есть ли у вас официальный источник?

Это не окажет негативного влияния на производительность, как говорят некоторые другие ответы.

Таким образом, обратная сторона отключения инструментария jvmstat заключается в том, что вы теряете информацию мониторинга производительности.

Также см. Это сообщение в блоге разработчика программного обеспечения в Twitter: evanjones.ca/jvm-mmap-pause.html Там он описывает положительное влияние на время паузы сборщика мусора.

Обратите внимание на комментарий @simonc: это работает только в нескольких версиях JVM и больше не поддерживается. См. http://bugs.sun.com/view_bug.do?bug_id=6447182, http://bugs.sun.com/view_bug.do?bug_id=6938627, http://bugs.sun.com/view_bug.do?bug_id=7009828 для получения дополнительной информации.

В качестве дополнения к ответу Мака (ответ дан 25 марта 2011 в 17:12), параметр java.tmp.dir больше не доступен с Java 8. См. Информацию по адресу: https://bugs.java.com/view_bug.do?bug_id=8189674

Источник

Сказочный портал