Я взаимодействую с собственной библиотекой Fortran (физикой) из Java/Scala с использованием JNA
, вызывается с использованием распределенной вычислительной инфраструктуры Apache Spark.Проблемы с поиском причины SIGSEGV при использовании собственной библиотеки fortran с использованием JNA
следующие отчеты производятся с использованием моей библиотеки /opt/MYORG/hdd/usr/local/lib/mylib.so
скомпилирован с ifort
и отладочные опции компилятора
Мои исполнители аварии время от времени из-за SIGSEGV
, обозначенном JVM ошибки-Report:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fea0f490700, pid=33080, tid=140647778658048
#
# JRE version: Java(TM) SE Runtime Environment (8.0_60-b27) (build 1.8.0_60-b27)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.60-b23 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C 0x00007fea0f490700
полный отчет загружен здесь: https://www.amazon.com/clouddrive/share/GDqXyIRNVkY86XYCXkorjiuE4bZm4AmnNWllXBhMVmk?encoding=UTF8&mgh=1&ref=cd_ph_share_link_copy
Мне удалось создать основную свалку, которую я проанализирован с
gdb /usr/java/jdk1.8.0_60/bin/java core.33080
(gdb) bt
#0 0x00007fed0a04f1d7 in raise() from /usr/lib64/libc.so.6
#1 0x00007fed0a0508c8 in abort() from /usr/lib64/libc.so.6
#2 0x00007fed0995b6b5 in os::abort(bool)() from /usr/java/jdk1.8.0_60/jre/lib/amd64/server/libjvm.so
#3 0x00007fed09af9bf3 in VMError::report_and_die()() from /usr/java/jdk1.8.0_60/jre/lib/amd64/server/libjvm.so
#4 0x00007fed09960edf in JVM_handle_linux_signal() from /usr/java/jdk1.8.0_60/jre/lib/amd64/server/libjvm.so
#5 0x00007fed09957673 in signalHandler(int, siginfo*, void*)() from /usr/java/jdk1.8.0_60/jre/lib/amd64/server/libjvm.so
#6 <signal handler called>
#7 0x00007fea0f490700 in ??()
#8 0x00007fed0a7fcbc2 in __nptl_deallocate_tsd() from /usr/lib64/libpthread.so.0
#9 0x00007fed0a7fcdd3 in start_thread() from /usr/lib64/libpthread.so.0
#10 0x00007fed0a11173d in clone() from /usr/lib64/libc.so.6
Далее я проанализировал ядро с
thread apply all bt full
(Выход может быть найден здесь: https://www.amazon.com/clouddrive/share/ZUmv6GEM2oJ0MCCqfnNEs2OOateJVGnhnxoHsJnbvBV?ref_=cd_ph_share_link_copy)
Но дон Не вижу ни одной темы, которая сейчас находится в моей (вероятно, ошибочной) библиотеке mylib.so
, все потоки, кажется, ждут. Ничто до сих пор не указывает мне на то, что mylib.so
вызывает SIGSEGV
, но если я заменил вызов на mylib.so
с помощью Mock в моем коде (т.е. нет фактического собственного вызова), то нет SIGSEGV
, поэтому я заключаю, что проблема должна быть в вызов JNA в мою родную библиотеку.
До сих пор я попытался следующие подсказки: https://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors без успеха
Может кто-то помочь моему найти причину выше SIGSEGV
?
Вы _probably_ не хотите как '-динамический', так и' -статический' (вы, вероятно, должны отказаться от последнего, но иногда это зависит от платформы). – technomage
@technomage Где я использовал '-динамический'? –
Я беспокоюсь, что в вашей библиотеке Fortran может быть почти что угодно. Вы уверены, что в нем нет ошибок? –