Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-18208

Use default JVM thread stack size in config files

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Normal
    • Resolution: Unresolved
    • 5.x
    • Local/Config
    • None
    • Correctness
    • Normal
    • Normal
    • User Report
    • All
    • None

    Description

      JVM per-thread stack sized defined here and here is too small for certain JVMs resulting in java.lang.StackOverflowError when starting the server (see attached stack trace). Should Cassandra allow JVMs to pick up their default stack size?  I know it is possible to change the values in the config files but I think it will be useful for the defaults to be used.  A simple patch might be:

      /================/

      diff --git a/build.xml b/build.xml
      index 3c29f8c365..fcf63e16aa 100644
      — a/build.xml
      +++ b/build.xml
      @@ -165,9 +165,7 @@
           <condition property="arch_x86">
             <equals arg1="${os.arch}" arg2="x86" />
           </condition>

      •    <!-- On non-X86 JDK 8 (such as M1 Mac) the smallest allowed Xss is 384k; so need a larger value
             when on these platforms. -->
      •    <condition property="jvm_xss" value="-Xss256k" else="-Xss384k">
               <isset property="arch_x86" />
             </condition>

      diff --git a/conf/jvm-server.options b/conf/jvm-server.options
      index 46967f4ad7..5c84fae2fd 100644
      — a/conf/jvm-server.options
      +++ b/conf/jvm-server.options
      @@ -101,7 +101,6 @@
       -XX:+HeapDumpOnOutOfMemoryError

       # Per-thread stack size.
      --Xss256k

       # Make sure all memory is faulted and zeroed on startup.
       # This helps prevent soft faults in containers and makes

      /================/

       

      Startup failure:

      /=================/

      $ ./bin/cassandra -f

      ....

      Exception (java.lang.StackOverflowError) encountered during startup: null
      java.lang.StackOverflowError
              at sun.misc.URLClassPath.getLoader(URLClassPath.java:556)
              at sun.misc.URLClassPath.getNextLoader(URLClassPath.java:494)
              at sun.misc.URLClassPath.getResource(URLClassPath.java:248)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at io.netty.handler.ssl.OpenSsl.<clinit>(OpenSsl.java:124)
              at org.apache.cassandra.security.SSLFactory.<clinit>(SSLFactory.java:73)
              at org.apache.cassandra.security.AbstractSslContextFactory.<clinit>(AbstractSslContextFactory.java:56)
              at java.lang.Class.forName0(Native Method)
              at java.lang.Class.forName(Class.java:264)
              at org.apache.cassandra.utils.FBUtilities.newSslContextFactory(FBUtilities.java:674)
              at org.apache.cassandra.config.EncryptionOptions.initializeSslContextFactory(EncryptionOptions.java:289)
              at org.apache.cassandra.config.EncryptionOptions.applyConfig(EncryptionOptions.java:213)
              at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:828)
              at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:376)
              at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:204)
              at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:188)
              at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:805)
              at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748)
              at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876)
      ERROR [main] 2023-01-30 12:09:17,095 CassandraDaemon.java:898 - Exception encountered during startup
      java.lang.StackOverflowError: null
              at sun.misc.URLClassPath.getLoader(URLClassPath.java:556)
              at sun.misc.URLClassPath.getNextLoader(URLClassPath.java:494)
              at sun.misc.URLClassPath.getResource(URLClassPath.java:248)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at java.lang.ClassLoader.defineClass1(Native Method)
              at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
              at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
              at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
              at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
              at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
              at io.netty.handler.ssl.OpenSsl.<clinit>(OpenSsl.java:124)
              at org.apache.cassandra.security.SSLFactory.<clinit>(SSLFactory.java:73)
              at org.apache.cassandra.security.AbstractSslContextFactory.<clinit>(AbstractSslContextFactory.java:56)
              at java.lang.Class.forName0(Native Method)
              at java.lang.Class.forName(Class.java:264)
              at org.apache.cassandra.utils.FBUtilities.newSslContextFactory(FBUtilities.java:674)
              at org.apache.cassandra.config.EncryptionOptions.initializeSslContextFactory(EncryptionOptions.java:289)
              at org.apache.cassandra.config.EncryptionOptions.applyConfig(EncryptionOptions.java:213)
              at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:828)
              at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:376)
              at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:204)
              at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:188)
              at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:805)
              at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748)
              at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876)

      /=================/

      Attachments

        1. jvmstack.patch
          0.8 kB
          Rishi Misra

        Issue Links

          Activity

            People

              Unassigned Unassigned
              rmi Rishi Misra
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated: