简体   繁体   English

使用Java + SAMBA + Win 7的文件列表非常慢

[英]Extremely slow file listing using Java + SAMBA + Win 7

I have identified that calling Java's File.listFiles() over a SAMBA folder from a Win 7 client is extremely slow , actually almost 100 times slower than from a Mac client. 我已经确定从Win 7客户端通过SAMBA文件夹调用Java的File.listFiles() 非常慢 ,实际上比从Mac客户端慢几百倍。 (Both clients are running Java 7). (两个客户端都运行Java 7)。 Both clients are naturally on the same 1GB LAN. 两个客户端都自然地位于同一个1GB LAN上。 A customer has tested from his Win XP client and received far better performance than from his Win7 client. 一位客户已经从他的Win XP客户端进行了测试,并获得了比他的Win7客户端更好的性能。 Does anyone know how to resolve this? 有谁知道如何解决这个问题?

Some test data, including timing: Listing 31 folders over SAMBA ("QNAP" NAS disk): 一些测试数据,包括时间:在SAMBA(“QNAP”NAS磁盘)上列出31个文件夹:

Win 7: 赢7:

listing \\nas\Public\David\Remote Stocks: 0.0s
listing \\nas\Public\David\Remote Stocks\Animals: 0.093s
listing \\nas\Public\David\Remote Stocks\Animals\.jalbum: 0.312s
listing \\nas\Public\David\Remote Stocks\Animals\.jalbum\thumbs: 0.405s
listing \\nas\Public\David\Remote Stocks\album: 1.248s
listing \\nas\Public\David\Remote Stocks\album\Animals: 1.31s
listing \\nas\Public\David\Remote Stocks\album\Animals\thumbs: 1.388s
listing \\nas\Public\David\Remote Stocks\album\Animals\slides: 1.762s
listing \\nas\Public\David\Remote Stocks\album\Animals\res: 2.542s
listing \\nas\Public\David\Remote Stocks\album\Sports: 2.761s
listing \\nas\Public\David\Remote Stocks\album\Sports\thumbs: 2.839s
listing \\nas\Public\David\Remote Stocks\album\Sports\slides: 3.229s
listing \\nas\Public\David\Remote Stocks\album\Sports\res: 3.978s
listing \\nas\Public\David\Remote Stocks\album\res: 4.196s
listing \\nas\Public\David\Remote Stocks\album\Scenic: 4.695s
listing \\nas\Public\David\Remote Stocks\album\Scenic\thumbs: 4.773s
listing \\nas\Public\David\Remote Stocks\album\Scenic\slides: 5.194s
listing \\nas\Public\David\Remote Stocks\album\Scenic\res: 5.99s
listing \\nas\Public\David\Remote Stocks\album\People: 6.208s
listing \\nas\Public\David\Remote Stocks\album\People\thumbs: 6.302s
listing \\nas\Public\David\Remote Stocks\album\People\slides: 6.692s
listing \\nas\Public\David\Remote Stocks\album\People\res: 7.472s
listing \\nas\Public\David\Remote Stocks\.jalbum: 7.659s
listing \\nas\Public\David\Remote Stocks\Sports: 7.768s
listing \\nas\Public\David\Remote Stocks\Sports\.jalbum: 7.909s
listing \\nas\Public\David\Remote Stocks\Sports\.jalbum\thumbs: 7.987s
listing \\nas\Public\David\Remote Stocks\Scenic: 8.486s
listing \\nas\Public\David\Remote Stocks\Scenic\.jalbum: 8.642s
listing \\nas\Public\David\Remote Stocks\Scenic\.jalbum\thumbs: 8.72s
listing \\nas\Public\David\Remote Stocks\People: 9.282s
listing \\nas\Public\David\Remote Stocks\People\.jalbum: 9.422s

Same listing on Mac: Mac上的相同商家信息:

listing /Volumes/Public/David/Remote Stocks: 0.0s
listing /Volumes/Public/David/Remote Stocks/Animals: 0.013s
listing /Volumes/Public/David/Remote Stocks/Animals/.jalbum: 0.018s
listing /Volumes/Public/David/Remote Stocks/Animals/.jalbum/thumbs: 0.022s
listing /Volumes/Public/David/Remote Stocks/album: 0.027s
listing /Volumes/Public/David/Remote Stocks/album/Animals: 0.03s
listing /Volumes/Public/David/Remote Stocks/album/Animals/thumbs: 0.032s
listing /Volumes/Public/David/Remote Stocks/album/Animals/slides: 0.034s
listing /Volumes/Public/David/Remote Stocks/album/Animals/res: 0.038s
listing /Volumes/Public/David/Remote Stocks/album/Sports: 0.04s
listing /Volumes/Public/David/Remote Stocks/album/Sports/thumbs: 0.042s
listing /Volumes/Public/David/Remote Stocks/album/Sports/slides: 0.046s
listing /Volumes/Public/David/Remote Stocks/album/Sports/res: 0.05s
listing /Volumes/Public/David/Remote Stocks/album/res: 0.052s
listing /Volumes/Public/David/Remote Stocks/album/Scenic: 0.058s
listing /Volumes/Public/David/Remote Stocks/album/Scenic/thumbs: 0.064s
listing /Volumes/Public/David/Remote Stocks/album/Scenic/slides: 0.068s
listing /Volumes/Public/David/Remote Stocks/album/Scenic/res: 0.074s
listing /Volumes/Public/David/Remote Stocks/album/People: 0.08s
listing /Volumes/Public/David/Remote Stocks/album/People/thumbs: 0.082s
listing /Volumes/Public/David/Remote Stocks/album/People/slides: 0.085s
listing /Volumes/Public/David/Remote Stocks/album/People/res: 0.089s
listing /Volumes/Public/David/Remote Stocks/.jalbum: 0.091s
listing /Volumes/Public/David/Remote Stocks/Sports: 0.103s
listing /Volumes/Public/David/Remote Stocks/Sports/.jalbum: 0.106s
listing /Volumes/Public/David/Remote Stocks/Sports/.jalbum/thumbs: 0.108s
listing /Volumes/Public/David/Remote Stocks/Scenic: 0.11s
listing /Volumes/Public/David/Remote Stocks/Scenic/.jalbum: 0.122s
listing /Volumes/Public/David/Remote Stocks/Scenic/.jalbum/thumbs: 0.124s
listing /Volumes/Public/David/Remote Stocks/People: 0.126s
listing /Volumes/Public/David/Remote Stocks/People/.jalbum: 0.133s

I finally attempted to perform a multi threaded listing on Windows to overcome network lag effects. 我终于尝试在Windows上执行多线程列表以克服网络延迟效应。 It helped somewhat, -from 9 to 3 seconds, ie 3 times faster, but still significantly slower performance than the 0.133s measured from my MacBook pro client. 它有所帮助 - 从9到3秒,即快3倍,但仍然明显慢于我的MacBook pro客户端测量的0.133秒。

I think you stumbled upon a known Windows issue. 我认为你偶然发现了一个已知的Windows问题。

Maybe this article could help you: http://www.sysprobs.com/windows-7-network-slow 也许这篇文章可以帮到你: http//www.sysprobs.com/windows-7-network-slow

EDIT: 编辑:

If you are sure that your issue is not due to a bad behaviour of the operating system when it connects to shares exposed by older SMB protocols, then it's a (not unheard of) slowness imputable to the JDK implementation. 如果您确定您的问题不是由于操作系统连接到较旧的SMB协议所暴露的共享时的错误行为,那么它是JDK实现所带来的(并非闻所未闻)缓慢。

OpenJDK's and Oracle Java's java.io.File.listFiles() delegates to the String [] list() method of the (unexposed) abstract class java.io.FileSystem which in turn is implemented in platform specific manner by java.io.UnixFileSystem , java.io.Win32FileSystem , and java.io.WinNTFileSystem . 的OpenJDK的和Oracle Java的java.io.File.listFiles()委托给String [] list()的(未曝光)的抽象类的方法java.io.FileSystem而这又是在特定于平台的方式来实现由java.io.UnixFileSystemjava.io.Win32FileSystemjava.io.WinNTFileSystem

Their list() function is always native , so I think the slowness is imputable to the DLL implementation that ships with the JRE. 他们的list()函数总是native ,所以我认为这种缓慢可以归结为JRE附带的DLL实现。

We had before similar issues regarding file browsing in Windows XP. 我们之前遇到过类似的Windows XP文件浏览问题。 It was an outstanding bug of the JRE for much time. 这是JRE的一个突出的错误很长一段时间。

Problem solved by using the Files.walkFileTree API. 使用Files.walkFileTree API解决了问题。 With it I'm able to grab all attributes of all files of a folder with one SAMBA network IO call. 有了它,我可以通过一个SAMBA网络IO调用获取文件夹的所有文件的所有属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM