2016-09-21 7 views
0

Один из наших клиентов связывается со мной, жалуясь на то, что у него появляется следующая авария JRE при использовании нашего Java-агента.Как доказать, что ошибка не является моим Java-агентом или как ее отладить?

Согласно ошибке (см. Ниже), авария происходит от нативного кода, поскольку проблемный кадр классифицируется как «C».

Я сделал несколько поисковых запросов, и кажется, что есть некоторые открытые ошибки, которые довольно похожи на эту проблему при использовании java-агентов. Смотрите следующие ссылки:

https://bugs.openjdk.java.net/browse/JDK-8094079

https://bugs.openjdk.java.net/browse/JDK-8041920

Вопрос заключается в том, что клиент не хочет, чтобы обновить JDK, так как он упоминает, что у него есть другие Java агенты, работающие без какого-либо вопроса.

Любые предложения по решению этой проблемы?

Для полноты, смотрите ошибку, что он послал:

cat /opt/somecompany/apps/some-product-platform/some-product-name/hs_err_pid6697.log | grep sealights 
7fe19d9b5000-7fe19d9d7000 r--s 00401000 ca:01 3539943     /opt/somecompany/apps/some-product-platform/some-product-name/sealights/sl-test-listener.jar 
jvm_args: -javaagent:/opt/somecompany/apps/some-product-platform/hawtio/jolokia-jvm.jar=config=/opt/somecompany/apps/some-product-platform/some-product-name/conf/jolokia-agent.properties -javaagent:/opt/somecompany/apps/some-product-platform/some-product-name/agent/newrelic.jar -DNEWS_product_HOME=/opt/somecompany/apps/some-product-platform/some-product-name -Dsl.environmentName=Functional Tests DEV-INT -Dsl.customerId=myCustomer -Dsl.appName=ABB-product-name -Dsl.server=https://my-server.com -Dsl.includes=com.somecompany.* -javaagent:/opt/somecompany/apps/some-product-platform/some-product-name/sealights/sl-test-listener.jar -Dlog.dir=/opt/somecompany/apps/some-product-platform/logs -Dlog.threshold=debug 
java_class_path (initial): some-product-name.jar:/opt/somecompany/apps/some-product-platform/hawtio/jolokia-jvm.jar:/opt/somecompany/apps/some-product-platform/some-product-name/agent/newrelic.jar:/opt/somecompany/apps/some-product-platform/some-product-name/sealights/sl-test-listener.jar 

JVM crash message: 

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# SIGSEGV (0xb) at pc=0x0000000000000055, pid=6697, tid=140604865455872 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b23 mixed mode linux-amd64 compressed oops) 
# Problematic frame: 
# C 0x0000000000000055 
# 
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again 
# 
# An error report file with more information is saved as: 
# /opt/somecompany/apps/some-product-platform/some-product-name/hs_err_pid6697.log 
Compiled method (c1) 565518 13823  1  sun.invoke.util.ValueConversions::identity (2 bytes) 
total in heap [0x00007fe1a76857d0,0x00007fe1a7685a48] = 632 
relocation  [0x00007fe1a76858f8,0x00007fe1a7685918] = 32 
main code  [0x00007fe1a7685920,0x00007fe1a7685980] = 96 
stub code  [0x00007fe1a7685980,0x00007fe1a7685a10] = 144 
metadata  [0x00007fe1a7685a10,0x00007fe1a7685a18] = 8 
scopes data [0x00007fe1a7685a18,0x00007fe1a7685a20] = 8 
scopes pcs  [0x00007fe1a7685a20,0x00007fe1a7685a40] = 32 
dependencies [0x00007fe1a7685a40,0x00007fe1a7685a48] = 8 
# 
# If you would like to submit a bug report, please visit: 
# http://bugreport.sun.com/bugreport/crash.jsp 
# 
+0

Когда вы запускаете агента на той же версии Java, можете ли вы его воспроизвести? –

+0

Нет. Я пытался использовать одну и ту же версию java и одну и ту же машину linux (они используют экземпляр Amazon, поэтому я создал машину с того же изображения). – nadavy

+0

Кроме того, в одной из ошибок, о которых они упоминали, он иногда воспроизводит. Fun for me :) – nadavy

ответ

0

Задав для получения более подробной информации в обсуждении чата, я полагаю, что эта ошибка связана с использованием ASM AdviceAdapter в комбинации с другими агентами в одном приложении. Если другой агент ожидает определенную структуру класса, использование адаптера может изменить порядок индексов переменных рассматриваемого класса, что другой агент не ожидает. Когда VM пропускает проверку встроенных классов, это приводит к серьезному сбою.

Решение было бы заменой инструментария, чтобы не использовать AdviceAdapter.