Nano Hash - криптовалюты, майнинг, программирование

Регистрация вывода консоли java outofmemoryerror stacktrace

Я столкнулся с OutOfMemoryError в своей программе JAVA. Это нормально, что OutOfMemoryError произошел, но я хотел бы зарегистрировать это, когда это произойдет. Я использовал параметры -XX:OnOutOfMemoryError, чтобы определить, что это произошло, но он не регистрирует информацию о трассировке стека, которая выводится на консоль. Я попытался использовать перенаправление для регистрации этого вывода консоли, но 2>&1, 2> и все другие параметры не смогли зарегистрировать этот вывод, и он просто печатался на консоли. Есть ли способ зарегистрировать эту информацию о трассировке стека? Я гуглил и искал на stackoverflow.com, но не нашел ответа. Пожалуйста посоветуй.

  • Heap Dump тоже не мой вариант. У меня не так много места, поэтому я не могу рисковать таким огромным файлом :'( Мне просто нужно записать информацию о трассировке стека.

Благодарю вас!


  • На какой платформе вы находитесь? 22.09.2015
  • @WhiteViking Я использую Linux :) 22.09.2015
  • возможный дубликат Использование параметра HeapDumpOnOutOfMemoryError для дампа кучи для JBoss 22.09.2015
  • @MickMnemonic спасибо за ответ. Я забыл упомянуть, но HeapDump тоже не мой вариант. :) 22.09.2015
  • Анализ только трассировки стека может не указать фактическую причину OOME (только последнее неудачное выделение). Можете ли вы профилировать свое приложение, например. VisualVM? 22.09.2015
  • @MickMnemonic Я не знаю о VisualVM, но попытаюсь узнать. Спасибо! 22.09.2015

Ответы:


1
  • Вариант 1: вы можете использовать хук OnOutOfMemoryError в сочетании с jstack, чтобы получить трассировку стека вашего процесса:

    "-XX:OnOutOfMemoryError=jstack -l %p"

    примечание: на производстве у вас, скорее всего, будет отдельный сценарий оболочки для этого, чтобы избежать проблем с jstack, исходящим из разных версий Java.

  • Вариант 2. Вы можете использовать setUncaughtExceptionHandler для перехвата всех исключений и проверки OutOfMemoryError в частности:

    Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
    
            @Override
            public void uncaughtException(Thread thread, Throwable ex) {
    ...
    
22.09.2015
  • Вау, это действительно полезно. Я обязательно попробую это. Спасибо! 22.09.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..