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

HPROF: JVM crashes during Shutdown when cpu=times with many threads, finalizatio

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P5 P5
    • None
    • 1.4.0
    • tools
    • x86
    • linux, windows_nt



      Name: tb29552 Date: 02/11/2002


      /*
       * FULL PRODUCT VERSION : java version "1.4.0-rc" Java(TM) 2 Runtime
       * Environment, Standard Edition (build 1.4.0-rc-b91) Java HotSpot(TM) Client
       * VM (build 1.4.0-rc-b91, mixed mode)
       *
       *
       * FULL OPERATING SYSTEM VERSION :
       *
       * glibc-2.2.4-19.3 Linux 2.4.9-6smp #1 SMP i686 Red Hat Linux release 7.2
       * (Enigma)
       *
       * ADDITIONAL OPERATING SYSTEMS :
       *
       *
       * EXTRA RELEVANT SYSTEM CONFIGURATION : 2 CPUs
       *
       * A DESCRIPTION OF THE PROBLEM : When starting Java with "java
       * -Xrunhprof:cpu=times ..." the program will execute normally, but the JVM
       * crashes before the CPU statistics are written to the file.
       *
       * The effect is identical to that of bug 4489387, but in JDK 1.4 RC1, this bug
       * will only occur in a rarer setting. See the attached log and the bug
       * reproducing source code for details.
       *
       *
       * STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : 1. Compile the attached sources.
       * 2. java -Xrunhprof:cpu=times CrashTest 3. Fiddle with the loop counts
       * until the bug manifests reliably.
       *
       * EXPECTED VERSUS ACTUAL BEHAVIOR : I expected the CPU profiling data to be
       * written to a file. Actually, the JVM crashes. In rarer cases, it hangs.
       *
       *
       * ERROR MESSAGES/STACK TRACES THAT OCCUR : HPROF ERROR: thread local table NULL
       * in method exit 0x8073f44 HPROF ERROR: thread local table NULL in method
       * exit 0x8073f44 HPROF ERROR: thread local table NULL in method exit
       * 0x8075a5c HPROF ERROR : stack underflow in method exit HPROF ERROR : stack
       * underflow in method exit
       *
       * Unexpected Signal : 11 occurred at PC=0x40339442
       * Function=get_thread_local_storage__5jvmpiP7JNIEnv_+0xF2
       * Library=/usr/java/j2sdk1.4.0/jre/lib/i386/client/libjvm.so
       *
       * Current Java thread: at java.lang.Shutdown.halt(Native Method) at
       * java.lang.Shutdown.exit(Shutdown.java:211) - locked <0x48193dc8> (a
       * java.lang.Class) at java.lang.Runtime.exit(Runtime.java:90) at
       * java.lang.System.exit(System.java:713) at
       * CrashTest.main(CrashTest.java:31)
       *
       * Dynamic libraries: 08048000-0804d000 r-xp 00000000 09:00 1589915
       * /usr/java/j2sdk1.4.0/bin/java 0804d000-0804e000 rw-p 00004000 09:00
       * 1589915 /usr/java/j2sdk1.4.0/bin/java 40000000-40016000 r-xp 00000000
       * 09:00 1474573 /lib/ld-2.2.4.so 40016000-40017000 rw-p 00015000 09:00
       * 1474573 /lib/ld-2.2.4.so 40018000-40021000 r-xp 00000000 09:00 1999515
       * /usr/java/j2sdk1.4.0/jre/lib/i386/native_threads/libhpi.so
       * 40021000-40022000 rw-p 00008000 09:00 1999515
       * /usr/java/j2sdk1.4.0/jre/lib/i386/native_threads/libhpi.so
       * 40022000-40023000 r--p 00000000 09:00 672074
       * /usr/lib/locale/en_US/LC_IDENTIFICATION 40023000-40024000 r--p 00000000
       * 09:00 262789 /usr/lib/locale/en_US/LC_MEASUREMENT 40024000-40025000 r--p
       * 00000000 09:00 1998861 /usr/lib/locale/en_US/LC_TELEPHONE
       * 40025000-40026000 r--p 00000000 09:00 1999242
       * /usr/lib/locale/en_US/LC_ADDRESS 40026000-40027000 r--p 00000000 09:00
       * 1999241 /usr/lib/locale/en_US/LC_NAME 40027000-40028000 r--p 00000000
       * 09:00 1720334 /usr/lib/locale/en_US/LC_PAPER 40028000-40029000 r--p
       * 00000000 09:00 2015260 /usr/lib/locale/en_US/LC_MESSAGES/SYS_LC_MESSAGES
       * 40029000-4002a000 r--p 00000000 09:00 262207
       * /usr/lib/locale/en_US/LC_MONETARY 4002a000-40037000 r-xp 00000000 09:00
       * 688145 /lib/i686/libpthread-0.9.so 40037000-4003f000 rw-p 0000c000
       * 09:00 688145 /lib/i686/libpthread-0.9.so 4003f000-40042000 r-xp
       * 00000000 09:00 1474590 /lib/libdl-2.2.4.so 40042000-40043000 rw-p
       * 00002000 09:00 1474590 /lib/libdl-2.2.4.so 40043000-40175000 r-xp
       * 00000000 09:00 688139 /lib/i686/libc-2.2.4.so 40175000-4017b000 rw-p
       * 00131000 09:00 688139 /lib/i686/libc-2.2.4.so 4017f000-40442000 r-xp
       * 00000000 09:00 803192 /usr/java/j2sdk1.4.0/jre/lib/i386/client/libjvm.so
       * 40442000-4058a000 rw-p 002c2000 09:00 803192
       * /usr/java/j2sdk1.4.0/jre/lib/i386/client/libjvm.so 4059e000-405b1000 r-xp
       * 00000000 09:00 1474595 /lib/libnsl-2.2.4.so 405b1000-405b2000 rw-p
       * 00012000 09:00 1474595 /lib/libnsl-2.2.4.so 405b4000-405e8000 r-xp
       * 00000000 09:00 328613 /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so
       * 405e8000-405f4000 rw-p 00033000 09:00 328613
       * /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so 405f6000-40618000 r-xp 00000000
       * 09:00 688143 /lib/i686/libm-2.2.4.so 40618000-40619000 rw-p 00021000
       * 09:00 688143 /lib/i686/libm-2.2.4.so 40619000-4062a000 r-xp 00000000
       * 09:00 1261810 /usr/java/j2sdk1.4.0/jre/lib/i386/libverify.so
       * 4062a000-4062c000 rw-p 00010000 09:00 1261810
       * /usr/java/j2sdk1.4.0/jre/lib/i386/libverify.so 4062c000-4064d000 r-xp
       * 00000000 09:00 1261798 /usr/java/j2sdk1.4.0/jre/lib/i386/libjava.so
       * 4064d000-4064f000 rw-p 00020000 09:00 1261798
       * /usr/java/j2sdk1.4.0/jre/lib/i386/libjava.so 40650000-40664000 r-xp
       * 00000000 09:00 1261811 /usr/java/j2sdk1.4.0/jre/lib/i386/libzip.so
       * 40664000-40667000 rw-p 00013000 09:00 1261811
       * /usr/java/j2sdk1.4.0/jre/lib/i386/libzip.so 40667000-41cde000 r--s
       * 00000000 09:00 737945 /usr/java/j2sdk1.4.0/jre/lib/rt.jar
       * 41d20000-41d37000 r--s 00000000 09:00 737946
       * /usr/java/j2sdk1.4.0/jre/lib/sunrsasign.jar 41d37000-41da5000 r--s
       * 00000000 09:00 737937 /usr/java/j2sdk1.4.0/jre/lib/jsse.jar
       * 41da5000-41db8000 r--s 00000000 09:00 737936
       * /usr/java/j2sdk1.4.0/jre/lib/jce.jar 41db8000-42039000 r--s 00000000 09:00
       * 737925 /usr/java/j2sdk1.4.0/jre/lib/charsets.jar 440e1000-440e7000 r--p
       * 00000000 09:00 671763 /usr/lib/locale/en_US/LC_COLLATE 440e7000-440e8000
       * r--p 00000000 09:00 672075 /usr/lib/locale/en_US/LC_TIME
       * 440e8000-440e9000 r--p 00000000 09:00 425999
       * /usr/lib/locale/en_US/LC_NUMERIC 440e9000-440eb000 r--s 00000000 09:00
       * 1245856 /usr/java/j2sdk1.4.0/jre/lib/ext/dnsns.jar 4c2f3000-4c31e000 r--p
       * 00000000 09:00 426003 /usr/lib/locale/en_US/LC_CTYPE 4c31e000-4c32c000
       * r--s 00000000 09:00 1245857 /usr/java/j2sdk1.4.0/jre/lib/ext/ldapsec.jar
       * 4c330000-4c33a000 r-xp 00000000 09:00 1474611
       * /lib/libnss_files-2.2.4.so 4c33a000-4c33b000 rw-p 00009000 09:00 1474611
       * /lib/libnss_files-2.2.4.so 4c33b000-4c34e000 r-xp 00000000 09:00 1261795
       * /usr/java/j2sdk1.4.0/jre/lib/i386/libhprof.so 4c34e000-4c34f000 rw-p
       * 00012000 09:00 1261795 /usr/java/j2sdk1.4.0/jre/lib/i386/libhprof.so
       * 4c57e000-4c621000 r--s 00000000 09:00 1245858
       * /usr/java/j2sdk1.4.0/jre/lib/ext/localedata.jar 4c621000-4c63e000 r--s
       * 00000000 09:00 1245859
       * /usr/java/j2sdk1.4.0/jre/lib/ext/sunjce_provider.jar
       *
       * Local Time = Mon Jan 28 11:25:39 2002 Elapsed Time = 4 # # HotSpot Virtual
       * Machine Error : 11 # Error ID : 4F530E43505002D3 # Please report this
       * error at # http://java.sun.com/cgi-bin/bugreport.cgi # # Java VM: Java
       * HotSpot(TM) Client VM (1.4.0-rc-b91 mixed mode) #
       *
       *
       * This bug can be reproduced often.
       *
       * ---------- BEGIN SOURCE ----------
       */
      class DeliveryThread extends Thread {
          public synchronized void run() {
              try {
                  while (true)
                      wait();
              } catch(InterruptedException e) {
              }
          }
      }

      class Worker {
          private Thread eventThread;

          public Worker () {
              for (int i = 0; i < 100; i++) {
                  new Object();
              }
              this.eventThread = new DeliveryThread ();
              this.eventThread.start();
              for (int i = 0; i < 100; i++) {
                  new Object();
              }
          }

          protected void finalize() {
              eventThread.interrupt();
          }

      }

      public class CrashTest {
          private static void usage() {
              System.err.println("Usage: java -Xrunhprof:cpu=times CrashTest " +
                                 "<number of threads to create>");
              System.exit(1);
          }

          public static void main(String[] args) {
              if (args.length != 1) {
                  usage();
              }
              try {
                  int threadCount = Integer.parseInt(args[0]);
                  System.out.println("Launching: " + threadCount + " Worker threads");
                  for (int i = 0; i < threadCount; i++) {
                      new Worker ();
                  }
              } catch (NumberFormatException nex) {
                  System.err.println(nex);
                  usage();
              }
              System.out.println("Shutting down VM");
              System.exit(0);
          }
      }

      //---------- END SOURCE ----------

      (Review ID: 138868)
      ======================================================================

            dcubed Daniel Daugherty
            tbell Tim Bell
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: