Пристани закрывается сразу после установки HEAPPROFILE - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу проанализировать использование памяти кучи вне кучи.
Поэтому я использую gperftools и добавляю env к jetty.sh:

export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
# export HEAPPROFILE=/home/cccccc/perftools/mybin

Работает нормально

[root@xxx ~]# lsof -n | grep tcmalloc
java      23200           root  mem       REG              253,1    2350880     667001 /usr/local/lib/libtcmalloc.so.4.5.3
java      23200 23203     root  mem       REG              253,1    2350880     667001 /usr/local/lib/libtcmalloc.so.4.5.3
java      23200 23204     root  mem       REG              253,1    2350880     667001 /usr/local/lib/libtcmalloc.so.4.5.3
java      23200 23205     root  mem       REG              253,1    2350880     667001 /usr/local/lib/libtcmalloc.so.4.5.3

Но когда я закомментирую HEAPPROFILE и попробую service jetty restart(start).
После регистрации

Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Dumping heap profile to /home/cccccc/perftools/mybin.0001.heap (Exiting, 0 bytes in use)
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
Starting Jetty: Starting tracking the heap
Starting tracking the heap
Starting tracking the heap
ok Thu Sep 20 20:33:36 CST 2018

Он выходит.
И проверил журнал ошибок, я обнаружил, что это ошибка libunwind.

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f882ad93dd4, pid=18147, tid=0x00007f882949a700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_122-b03) (build 1.8.0_122-ea-b03)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.122-b03 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libunwind.so.8+0x2dd4]  access_mem+0x24

(полное содержание: https://drive.google.com/open?id=1JB3R27Udpdid3FMgnoWQPr516gZsSfc3)

слишком далеко от моей области видимости.
Я использую gperftools-2.7 с libunwind-1.2.1 (до того как я использовал * 1025)* тот же результат).
Это может быть очень трудно решить. Слишком много факторов окружающей среды.

1 Ответ

0 голосов
/ 22 сентября 2018

Проблема почти наверняка связана с попыткой libunwind иметь дело со стековыми кадрами для кода, динамически генерируемого JVM (горячая точка и т. Д.).Я полагаю, что даже «интерпретатор» не является действительно классическим интерпретатором.

Ваша лучшая ставка, я думаю, это переключиться на разматывание на основе указателя кадра (передайте TCMALLOC_STACKTRACE_METHOD = x86 в качестве переменной среды).И вам нужно будет запустить JVM с -XX: + PreserveFramePointer (см. https://medium.com/netflix-techblog/java-in-flames-e763b3d32166)

...