Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш канал: @proJVM Вакансии: @jvmjobs @jvmjobschat ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌HH (вакансии) ❌Варез
Короче ответ -- никак нельзя, нужно пилить агент. В чем проблема подмонтировать файлик к контейнеру -- загадка.
Читать полностью…Я не передам путь к файлу, который я не могу закинуть на сервер
Читать полностью…jvmti агент это so-шка, путь к файлу там в параметры передашь, код на плюсах сгенерил o3 за пару секунд
Читать полностью…Кажется без агента никак, там это несложно делается, а почему агент не хочется приаттачить?
Читать полностью…Thread.currentThread().setUncaughtExceptionHandler(
нагуглил вот такое, если известен плюс минус поток который падает и кто его стартует
послать процессу SIGQUIT :)
JVM тогда выплюнет стектрейсы в stderr
вопрос в том, с какой стороны его вызыают, вангую что изнутри, представить что есть нечто снаружи, что вытесняет потоки таким образом фантазии не хватает
Читать полностью…Это скорее отсекает какую-то проблему в окгружении снаружи
тогда надо понять то ли кто-то хочет изнутри прерывать выполнение треда, то ли реально кто-то в jvm отправляет вызов (но маловероятно)
Даже если не будет, то в лучшем случае вы сможете получить pthread_id, и то не факт
Читать полностью…как вариант, на старте в логи распечатать системно знанимые настройки окружения: кол-во тредов, и объем памяти на тред.
Читать полностью…Агентом наверное самое эффективное решение, найти вызов и подменить его на свой легко
Читать полностью…Все это в ключи запуска java, да и можно к запущенному приаттачить. Короче говоря, не страшная это вещь, как-то же asyncprofiler народ пускает, а это по факту такой же jvmti агент
Читать полностью…Потому что у меня нет прямого контроля над хостом, сборкой контейнера, параметрами запуска.
Ну и ещё я боюсь веселья бутстрап-уровня, у нас кажется стдаут не собирается, нужен сконфигурированный логгер, логгер должен грузиться бутстрапным класслоадером, у нас всё валяется отдельными джарниками, если изменить командную строку ещё выглядит жизнеспособным, то запихнуть туда отдельный uberjar прямо нереально, это всё так или иначе выльется в пятнадцатиминутные (попробовал запустить - сломалось - поправил строчку - запустил снова) сценарии на пару дней в сумме
Он не падает там интеррапт
Ничего это не сделает
Это покажет, где поток был в момент интеррапта, а не кто его интерраптнул, интерраптит кто-то другой
Да нет никакого такого вопроса
Вопрос просветить меня насчёт непримитивных и плюс-минус профессиональных, что ли, опций получения трейса, чтобы я перестал в чем-то быть тупым
Был бы какой-то особый интеррапт, который манифестируется по-другому?
Читать полностью…Это уже спинофф с челленджем загазлайтить отдельный тред до СО и не более
Читать полностью…Спустить вниз (поднять? Уже не помню, куда стек растёт) гард пейджи перед интерраптом
Но на чистой джаве нереализуемо, и в целом хак, СО будет за счёт других механизмов, и, возможно, до интеррапта
Ребят, какая память в стеке, какие системные вызовы, там просто классический интеррапт
Читать полностью…Может памяти в стеке не хватает?
Прибиваь поток через системные вызовы как-то неоптимально и странно, обычно нельзя новый создать из-за настроек ОС, но чтобы прибивать, ну такое...
Да и критерий прибития должен быть какой-то разумный
Если бы там все руками делалось, было бы проще, но тут половину фреймворка придется переопределить
Я конечно тоже рассматриваю, но хочу айратнуть
Если тред убивают через системные вызовы ОС, то все усложняется. Если через java api, отнаследуйся от thread, переопредели interrupt и бросай исключение с перехватом и выводом стектрейса - получишь ответ на вопрос кто прерывает
Читать полностью…Какие есть способы узнать, кто интерраптит тред (= получить стектрейс)?
Есть приложение за семью джампхостами в облаке, там кто-то даёт треду по башке (скорее всего, по таймауту), надо найти причину/виновника. Прямой поиск по кодобазе ничего явного не выдал, rt.jar подменить не могу, с инструментацией не факт что получится подрубить агента.