[jcifs] Starvation of threads while accessing files and directories with jcifs

Marro, Donato marro at e-Spirit.de
Tue Apr 26 14:55:49 GMT 2005


Hello,

i have some problems while accessing files and directories
with jcifs in a multithreaded environment (running on Resin 2.1.13
with jcifs 1.1.8).
I've configured a maximum number of 200 possible threads.
But after some hours of operating with the application on
the file-system, more and more threads are blocked until there
are no more free threads to allocate and so there is no more
response from our webserver.

An extract from a threaddump looks like the following:

170 threads in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x04f7baa8 nid=0x1420 waiting for
monitor entry [ae3f000..ae3fd90]
    at jcifs.smb.SmbTransport.getSmbSession(SmbTransport.java:220)
    - waiting to lock <0x17596610> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbFile.connect(SmbFile.java:823)
    at jcifs.smb.SmbFile.connect0(SmbFile.java:797)
    at jcifs.smb.SmbFile.queryPath(SmbFile.java:1202)
    at jcifs.smb.SmbFile.exists(SmbFile.java:1285)
    ...

1 thread in the state:
"JCIFS-SmbTransport" daemon prio=5 tid=0x02ff8b68 nid=0x14e8 waiting for
monitor entry [385f000..385fd90]
    at jcifs.smb.SmbTransport.run(SmbTransport.java:512)
    - waiting to lock <0x17596610> (a jcifs.smb.SmbTransport)
    at java.lang.Thread.run(Thread.java:534)

1 thread in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x03b3f408 nid=0x270 in
Object.wait() [857f000..857fd90]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x1330c278> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119)
    - locked <0x17596610> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbTree.sendTransaction(SmbTree.java:54)
    at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:689)
    at jcifs.smb.SmbFile.queryPath(SmbFile.java:1230)
    at jcifs.smb.SmbFile.exists(SmbFile.java:1285)
    ...

2 threads in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x06331408 nid=0xb1c waiting for
monitor entry [853f000..853fd90]
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:108)
    - waiting to lock <0x17596610> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbFile.connect(SmbFile.java:827)
    at jcifs.smb.SmbFile.connect0(SmbFile.java:797)
    at jcifs.smb.SmbFile.open0(SmbFile.java:852)
    at jcifs.smb.SmbFile.open(SmbFile.java:881)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:68)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:62)
    at jcifs.smb.SmbFile.getInputStream(SmbFile.java:2494)
    ...

1 thread in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x056ec4a8 nid=0xd50 in
Object.wait() [83bf000..83bfd90]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x1330c278> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119)
    - locked <0x172c3628> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbTree.send(SmbTree.java:81)
    at jcifs.smb.SmbFile.send(SmbFile.java:725)
    at jcifs.smb.SmbFileInputStream.read(SmbFileInputStream.java:147)
    at jcifs.smb.SmbFileInputStream.read(SmbFileInputStream.java:105)
    ...

6 threads in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x0516a210 nid=0xb20 in
Object.wait() [83ff000..83ffd90]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x16690e80> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:161)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:155)
    ...

1 thread in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x03f2c878 nid=0x16d4 in
Object.wait() [82ff000..82ffd90]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x15992ab8> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:161)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:155)
    ...

7 threads in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x03049990 nid=0x1550 in
Object.wait() [81bf000..81bfd90]
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x157c45f0> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:161)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:155)
    ...

3 threads in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x034df638 nid=0xda8 in
Object.wait() [7ebf000..7ebfd90]
    at java.lang.Object.wait(Native Method)
    - waiting on <0x15513318> (a jcifs.smb.SmbTransport)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x15513318> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:161)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:155)
    ...

6 threads in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x03baf618 nid=0x1398 in
Object.wait() [4acf000..4acfd90]
    at java.lang.Object.wait(Native Method)
    - waiting on <0x15466d78> (a jcifs.smb.SmbTransport)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x15466d78> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:161)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:155)
    ...

1 thread in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x02f93440 nid=0xea0 in
Object.wait() [498f000..498fd90]
    at java.lang.Object.wait(Native Method)
    - waiting on <0x155ba480> (a jcifs.smb.SmbTransport)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x155ba480> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:161)
    at jcifs.smb.SmbSession.getChallenge(SmbSession.java:155)
    ...

1 thread in the state:
"tcpConnection-80-xxx" daemon prio=5 tid=0x033cad08 nid=0x1144 in
Object.wait() [478f000..478fd90]
    at java.lang.Object.wait(Native Method)
    - waiting on <0x1330c278> (a jcifs.smb.SmbTransport)
    at java.lang.Object.wait(Object.java:429)
    at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:931)
    - locked <0x1330c278> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119)
    - locked <0x155dffa8> (a jcifs.smb.SmbTransport)
    at jcifs.smb.SmbTree.sendTransaction(SmbTree.java:54)
    at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:689)
    at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1715)
    at jcifs.smb.SmbFile.listFiles(SmbFile.java:1606)
    at jcifs.smb.SmbFile.listFiles(SmbFile.java:1514)
    ...


Any idea what possibly causes the starvation of the threads?

Greetings,
Donato Marro


More information about the jcifs mailing list