Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8349968

NMT should never use tty for error logging

XMLWordPrintable

      see e.g. VirtualMemoryTracker::add_reserved_region

      While working on JDK-8330174, I get this:

      ```
        1 #
        2 # A fatal error has been detected by the Java Runtime Environment:
        3 #
        4 # Internal Error (/shared/projects/openjdk/jdk-jdk/source/src/hotspot/share/runtime/mutex.cpp:457), pid=363333, tid=363334
        5 # assert(false) failed: Attempting to acquire lock tty_lock/tty out of order with lock NmtVirtualMemory_lock/service-4 -- possible deadlock
        6 #
        7 # JRE version: (25.0) (slowdebug build )
        8 # Java VM: OpenJDK 64-Bit Server VM (slowdebug 25-internal-adhoc.thomas.source, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
        9 # Problematic frame:
       10 # V [libjvm.so+0x13c54eb] Mutex::check_rank(Thread*)+0x3c1
       11 #
       12 # Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /shared/projects/openjdk/jdk-jdk/output-slowdebug/core.363333)
       13 #
       14 #
       15
       16 --------------- S U M M A R Y ------------
       17
       18 Command Line: -Xshare:on -XX:+UseNewCode -Xlog:metaspace* -Xlog:cds+map
       19
       20 Host: starfish, AMD Ryzen 9 3900X 12-Core Processor, 24 cores, 62G, Ubuntu 20.04.6 LTS
       21 Time: Thu Feb 13 09:26:33 2025 CET elapsed time: 0.062652 seconds (0d 0h 0m 0s)
       22
       23 --------------- T H R E A D ---------------
       24
       25 Current thread (0x00007f8b1c02d480): JavaThread "Unknown thread" [_thread_in_vm, id=363334, stack(0x00007f8b20866000,0x00007f8b20967000) (1028K)]
       26
       27 Stack: [0x00007f8b20866000,0x00007f8b20967000], sp=0x00007f8b20962900, free space=1010k
       28 Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
       29 V [libjvm.so+0x13c54eb] Mutex::check_rank(Thread*)+0x3c1 (mutex.cpp:457)
       30 V [libjvm.so+0x13c4219] Mutex::lock_without_safepoint_check(Thread*)+0x99 (mutex.cpp:145)
       31 V [libjvm.so+0x13c4277] Mutex::lock_without_safepoint_check()+0x27 (mutex.cpp:153)
       32 V [libjvm.so+0x145e5d9] defaultStream::hold(long)+0xc3 (ostream.cpp:871)
       33 V [libjvm.so+0x145e6c6] defaultStream::write(char const*, unsigned long)+0x34 (ostream.cpp:899)
       34 V [libjvm.so+0x145c047] outputStream::do_vsnprintf_and_write_with_automatic_buffer(char const*, __va_list_tag*, bool)+0xa7 (ostream.cpp:144)
       35 V [libjvm.so+0x145c153] outputStream::do_vsnprintf_and_write(char const*, __va_list_tag*, bool)+0x7f (ostream.cpp:160)
       36 V [libjvm.so+0x145c2b2] outputStream::print_cr(char const*, ...)+0xac (ostream.cpp:174)
       37 V [libjvm.so+0x18ab25d] VirtualMemoryTracker::add_reserved_region(unsigned char*, unsigned long, NativeCallStack const&, MemTag)+0x70d (virtualMemoryTracker.cpp:400)
       38 V [libjvm.so+0x144047e] MemTracker::record_virtual_memory_reserve_and_commit(void*, unsigned long, NativeCallStack const&, MemTag)+0x59 (memTracker.hpp:160)
       39 V [libjvm.so+0x143ec48] os::map_memory(int, char const*, unsigned long, char*, unsigned long, bool, bool, MemTag)+0xae (os.cpp:2303)
       40 V [libjvm.so+0xcd1119] map_memory(int, char const*, unsigned long, char*, unsigned long, bool, bool, MemTag)+0x78 (filemap.cpp:1782)
       41 V [libjvm.so+0xcd1bb1] FileMapInfo::map_region(int, long, char*, ReservedSpace)+0x35d (filemap.cpp:1931)
       42 V [libjvm.so+0xcd13db] FileMapInfo::map_regions(int*, int, char*, ReservedSpace)+0xb9 (filemap.cpp:1838)
       43 V [libjvm.so+0x13787d8] MetaspaceShared::map_archive(FileMapInfo*, char*, ReservedSpace)+0x124 (metaspaceShared.cpp:1651)
       44 V [libjvm.so+0x13773f3] MetaspaceShared::map_archives(FileMapInfo*, FileMapInfo*, bool)+0x61d (metaspaceShared.cpp:1302)
       45 V [libjvm.so+0x137697f] MetaspaceShared::initialize_runtime_shared_and_meta_spaces()+0xdb (metaspaceShared.cpp:1122)
       46 V [libjvm.so+0x136a4a4] Metaspace::global_initialize()+0xce (metaspace.cpp:739)
       47 V [libjvm.so+0x1848f81] universe_init()+0xd7 (universe.cpp:887)
       48 V [libjvm.so+0xea1c62] init_globals()+0x60 (init.cpp:132)
       49 V [libjvm.so+0x1820ff4] Threads::create_vm(JavaVMInitArgs*, bool*)+0x3fe (threads.cpp:576)
       50 V [libjvm.so+0xff8c19] JNI_CreateJavaVM_inner(JavaVM_**, void**, void*)+0xbb (jni.cpp:3588)
       51 V [libjvm.so+0xff9081] JNI_CreateJavaVM+0x36 (jni.cpp:3679)
       52 C [libjli.so+0x8d8f] InitializeJVM+0x141 (java.c:1499)
       53 C [libjli.so+0x5882] JavaMain+0xec (java.c:494)
       54 C [libjli.so+0xc808] ThreadJavaMain+0x2b (java_md.c:649)
      ```

      Okay, its a rank problem, but NMT should really never use tty to begin with. It should consistently use UL (log_error or log_warning).

            Unassigned Unassigned
            stuefe Thomas Stuefe
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: