Possible VM deadlock due to FileSystems.getDefault and System.loadLibrary interplay

Alan Bateman Alan.Bateman at oracle.com
Wed Jan 3 17:00:32 UTC 2018


The stack trace looks like JDK 8 or older. The initialization has 
changed quite a bit in JDK 9+ and would be interesting to see if you can 
duplicate it there.

-Alan

On 03/01/2018 16:56, Vitaly Davidovich wrote:
> Hi all,
>
> Consider the following stacktraces of the main app thread and a background
> thread:
>
> "main" #1 prio=5 os_prio=0 tid=0x0000000001bfd000 nid=0x1958 waiting for
> monitor entry [0x00002b98ceba3000]
>
>     java.lang.Thread.State: BLOCKED (on object monitor)
>
>                  at java.lang.Runtime.loadLibrary0(Runtime.java:862)
>
>                  - waiting to lock <0x00000007bf834b20> (a java.lang.Runtime)
>
>                  at java.lang.System.loadLibrary(System.java:1122)
>
>                  at sun.nio.fs.UnixNativeDispatcher$1.run(
> UnixNativeDispatcher.java:573)
>
>                  at sun.nio.fs.UnixNativeDispatcher$1.run(
> UnixNativeDispatcher.java:571)
>
>                  at java.security.AccessController.doPrivileged(Native
> Method)
>
>                  at sun.nio.fs.UnixNativeDispatcher.<clinit>(
> UnixNativeDispatcher.java:571)
>
>                  at sun.nio.fs.UnixFileSystem.<init>(UnixFileSystem.java:67)
>
>                  at sun.nio.fs.LinuxFileSystem.<
> init>(LinuxFileSystem.java:39)
>
>                  at sun.nio.fs.LinuxFileSystemProvider.newFileSystem(
> LinuxFileSystemProvider.java:46)
>
>                  at sun.nio.fs.LinuxFileSystemProvider.newFileSystem(
> LinuxFileSystemProvider.java:39)
>
>                  at sun.nio.fs.UnixFileSystemProvider.<init>(
> UnixFileSystemProvider.java:56)
>
>                  at sun.nio.fs.LinuxFileSystemProvider.<init>
> (LinuxFileSystemProvider.java:41)
>
>                  at
> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> Method)
>
>                  at sun.reflect.NativeConstructorAccessorImpl.newInstance(
> NativeConstructorAccessorImpl.java:62)
>
>                  at sun.reflect.DelegatingConstructorAccessorI
> mpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>
>                  at java.lang.reflect.Constructor.
> newInstance(Constructor.java:423)
>
>                  at java.lang.Class.newInstance(Class.java:442)
>
>                  at sun.nio.fs.DefaultFileSystemProvider.createProvider(
> DefaultFileSystemProvider.java:48)
>
>                  at sun.nio.fs.DefaultFileSystemProvider.create(
> DefaultFileSystemProvider.java:63)
>
>                  at java.nio.file.FileSystems$DefaultFileSystemHolder.
> getDefaultProvider(FileSystems.java:108)
>
>                  at java.nio.file.FileSystems$DefaultFileSystemHolder.
> access$000(FileSystems.java:89)
>
>                  at java.nio.file.FileSystems$DefaultFileSystemHolder$1.run(
> FileSystems.java:98)
>
>                  at java.nio.file.FileSystems$DefaultFileSystemHolder$1.run(
> FileSystems.java:96)
>
>                  at java.security.AccessController.doPrivileged(Native
> Method)
>
>                  at java.nio.file.FileSystems$DefaultFileSystemHolder.
> defaultFileSystem(FileSystems.java:96)
>
>                  at java.nio.file.FileSystems$DefaultFileSystemHolder.<
> clinit>(FileSystems.java:90)
>
>                  at java.nio.file.FileSystems.getDefault(FileSystems.java:
> 176)
>
>                  at java.nio.file.Paths.get(Paths.java:84)
>
>                  at <some_package>.ServiceLoader.
> setup(ServiceLoader.java:446)
>
>                  at <some_package>.MetadataAdminLoader.main(
> MetadataAdminLoader.java:52)
>
>
>
>
>
> "shardDbExecutor-0-pool-0" #33 prio=5 os_prio=0 tid=0x0000000001ebf000
> nid=0x1d01 in Object.wait() [0x00002b991f941000]
>
>     java.lang.Thread.State: RUNNABLE
>
>                  at java.nio.file.FileSystems.getDefault(FileSystems.java:
> 176)
>
>                  at java.nio.file.Paths.get(Paths.java:138)
>
>                  at sun.misc.Launcher$ExtClassLoader.findLibrary(
> Launcher.java:224)
>
>                  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1830)
>
>                  at java.lang.Runtime.loadLibrary0(Runtime.java:870)
>
>                  - locked <0x00000007bf834b20> (a java.lang.Runtime)
>
>                  at java.lang.System.loadLibrary(System.java:1122)
>
>                  at sun.security.ec.SunEC$1.run(SunEC.java:60)
>
>                  at sun.security.ec.SunEC$1.run(SunEC.java:58)
>
>                  at java.security.AccessController.doPrivileged(Native
> Method)
>
>                  at sun.security.ec.SunEC.<clinit>(SunEC.java:58)
>
>                  at
> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> Method)
>
>                  at sun.reflect.NativeConstructorAccessorImpl.newInstance(
> NativeConstructorAccessorImpl.java:62)
>
>                  at sun.reflect.DelegatingConstructorAccessorI
> mpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>
>                  at java.lang.reflect.Constructor.
> newInstance(Constructor.java:423)
>
>                  at java.lang.Class.newInstance(Class.java:442)
>
>                  at sun.security.jca.ProviderConfig$2.run(
> ProviderConfig.java:221)
>
>                  at sun.security.jca.ProviderConfig$2.run(
> ProviderConfig.java:206)
>
>                  at java.security.AccessController.doPrivileged(Native
> Method)
>
>                  at sun.security.jca.ProviderConfig.doLoadProvider(
> ProviderConfig.java:206)
>
>                  at sun.security.jca.ProviderConfig.getProvider(
> ProviderConfig.java:187)
>
>                  - locked <0x00000007bea03f48> (a sun.security.jca.
> ProviderConfig)
>
>                  at sun.security.jca.ProviderList.
> getProvider(ProviderList.java:233)
>
>                  at sun.security.jca.ProviderList.
> getService(ProviderList.java:331)
>
>                  at sun.security.jca.GetInstance.
> getInstance(GetInstance.java:157)
>
>                  at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
>
>                  at com.microsoft.sqlserver.jdbc.
> TDSChannel.enableSSL(IOBuffer.java:1658)
>
>                  at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> connectHelper(SQLServerConnection.java:1976)
>
>                  at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(
> SQLServerConnection.java:1627)
>
>                  at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> connectInternal(SQLServerConnection.java:1458)
>
>                  at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(
> SQLServerConnection.java:772)
>
>                  at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(
> SQLServerDriver.java:1168)
>
>                  at java.sql.DriverManager.getConnection(DriverManager.
> java:664)
>
>                  at java.sql.DriverManager.getConnection(DriverManager.
> java:208)
>
>                  at <some_package>.ConnectionPool.createGoodConnection(
> ConnectionPool.java:565)
>
>                  at <some_package>.ConnectionPool.createNewConnection(
> ConnectionPool.java:519)
>
>                  at <some_package>.ConnectionPool.
> getConnection(ConnectionPool.java:407)
>
>                  at <some_package>.StatementCachingConnectionImpl
> .setupConnection(StatementCachingConnectionImpl.java:94)
>
>                  at <some_package>.StatementCachingConnectionImpl.<init>(
> StatementCachingConnectionImpl.java:54)
>
>                  at <some_package>.TestConnectionFactories$
> FaultInjectingConnection.<init>(TestConnectionFactories.java:90)
>
>                  at <some_package>.TestConnectionFactories.lambda$static$3(
> TestConnectionFactories.java:33)
>
>                  at <some_package>.TestConnectionFactories$$
> Lambda$12/1738236591.newConnection(Unknown Source)
>
>                  at <some_package>.SedaExecutor.
> setupConnections(SedaExecutor.java:130)
>
>                  at <some_package>.SedaExecutor$SedaThreadFactory.lambda$
> newThread$0(SedaExecutor.java:165)
>
>                  at
> <some_package>.SedaExecutor$SedaThreadFactory$$Lambda$22/1392419022.run(Unknown
> Source)
>
>                  at java.lang.Thread.run(Thread.java:748)
>
>
> The application intermittently hangs on startup, and the above callstacks
> are present.  It seems like there's a deadlock due to concurrent class
> loading and default FileSystem initialization (which itself triggers class
> loading here).
>
> I wasn't able to find any existing JBS entries reporting anything similar.
> Am I seeing this right? Is this a known issue?
>
> Thanks



More information about the core-libs-dev mailing list