也许有人可以回答我这个问题。在我最近的工作中,我注意到我的应用程序(通过 FTP 下载更新)在与 Linux 一起使用时非常慢。我在 Mac 上开发这些东西,所以我之前没有注意到这个问题,因为在 Mac OS 下下载速度感觉不是很低。但是当迁移到 Linux 时,应用程序的行为就完全不同了。
FTP 服务器(在 Ubuntu 服务器上运行的纯 FTP)与客户端连接到同一个 LAN,因此不考虑互联网速度问题。由于性能低,我将 Apache FTPClient 更改为 edtFTPj/Free。差异仍然显着,但可以接受。作为测试用例,我总是下载大小约为 30 MB 的相同文件。然后我检查了 ftp 服务器日志以了解传输速率。
你自己看。提到的 VMWare 在 Mac 上运行。除非另有说明,Java 是 Oracle Java 1.7。
阿帕奇公共网络 2.3
代码看起来像这样
FTPClient ftp = new FTPClient();
ftp.connect("srv0006");
ftp.login("anonymous", "asd");
ftp.setFileType(FTP.BINARY_FILE_TYPE);
File target = new File("/tmp/pub.tar");
FileOutputStream fos = new FileOutputStream(target);
ftp.retrieveFile("/pub.tar", fos);
fos.close();
以下是 ftp 日志的结果
Mac OS 从 IntelliJ Idea 开始
downloaded (30452736 bytes, 21200.67KB/sec)
Mac OS 从 shell 启动
downloaded (30452736 bytes, 21471.75KB/sec)
Windows 7(在 VMWare 中)
downloaded (30452736 bytes, 65243.15KB/sec)
OpenSuse 运行 Oracle Java(在 VMWare 中)
downloaded (30452736 bytes, 5274.56KB/sec)
OpenSuse 运行 OpenJDK(在 VMWare 中)
downloaded (30452736 bytes, 7663.68KB/sec)
Ubuntu 12.04.1 LTS
在通过千兆以太网连接到同一 LAN 的另一台 PC 上运行。其他 Ubuntu 机器的行为方式完全相同。我在 20 分钟后退出了转移。查看传输速率。
downloaded (7077888 bytes, 6.10KB/sec)
edtFTP4j 2.4.0
在此之后,我搬到了 edtFTP4j。结果好多了。
FileTransferClient ftp = new FileTransferClient();
ftp.setRemoteHost("srv0006");
ftp.setUserName("anonymous");
ftp.setPassword("asd");
ftp.connect();
ftp.downloadFile("/tmp/pub.tar", "/pub.tar");
ftp.disconnect();
结果发生了显着变化:
Mac OS 从 IntelliJ Idea 开始
downloaded (30452736 bytes, 109431.60KB/sec)
Mac OS 从 shell 启动
downloaded (30452736 bytes, 110333.66KB/sec)
Windows 7(在 VMWare 中)
downloaded (30452736 bytes, 91318.64KB/sec)
OpenSuse 运行 Oracle Java(在 VMWare 中)
downloaded (30452736 bytes, 89312.46KB/sec)
OpenSuse 运行 OpenJDK(在 VMWare 中)
downloaded (30452736 bytes, 89041.05KB/sec)
Ubuntu 12.10(在 VMWare 中)
downloaded (30452736 bytes, 81154.99KB/sec)
Ubuntu 12.04.1 LTS 在 i5 笔记本、Wifi (50 MBit/s) 上运行
downloaded (30452736 bytes, 2883.84KB/sec)
在 i5 笔记本电脑、千兆以太网上运行的 Ubuntu 12.04.1 LTS
downloaded (30452736 bytes, 93822.44KB/sec)
Ubuntu 12.04.1 LTS
在前面提到的 PC 上运行(传输速率为 6.10 KB/sec 的 PC)
downloaded (30452736 bytes, 11633.38KB/sec)
我不明白这一点。谁知道这里发生了什么?
再见,托斯滕...