jCIFS und OutOfMemoryExceptions

Aktuell arbeite ich mit jCIFS, einer Java-Libary für den Zugriff auf Windows-Shares. Dabei wurde in bestimmten Situationen reproduzierbar eine OutOfMemoryException geworfen. Der Stacktrace deutete auf Probleme in SmbFile.listFiles() hin. In einer Mailingliste zu Samba gab es den Hinweis, dass es ein Problem mit „Name lookup threads“ geben könnte. Da mir aufgefallen war, dass bei Ausführung des Codes die Threadanzahl von ca. 60 auf über 1000 stieg, war das ein Hinweis, der eine heisse Spur sein könnte.

Über die statische Config-Klasse wurde dann per setProperty die Reihenfolge der aufzurufenden Nameresolver geändert. Und siehe da, dann gab es keine OutOfMemoryExceptions mehr und die Threadanzahl blieb bei ca. 60. So setzt/verändert man die Reihenfolge der Nameresolver:

Config.setProperty( "jcifs.resolveOrder", "DNS,LMHOSTS,WINS" );

Wichtig war DNS an den Anfang zu setzen. Defaultmässig steht es ganz hinten.