在Raspberry Pi 3中使用Java下载速度非常慢

4
我在Java中编写了以下代码,用于在Raspberry Pi 3中下载文件:
String fileUrl = "...";
URL urlObj = new URL(fileUrl);
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
InputStream in = con.getInputStream();

byte[] buffer = new byte[8*1024];
long t = System.nanoTime();
int read;

while ((read = in.read(buffer)) != -1) {
    System.out.println("Read " + read + "B in " + (System.nanoTime() - t)/1000000.0 + " ms");
    t = System.nanoTime();
}

尽管我正在使用8 KB缓冲区,平均下载速度约为1389 B,大约需要205毫秒,相当于6.78 KB/s: 下载速度测量 我还注意到,在执行此代码时,CPU使用率始终为25%。由于RPi的CPU有4个核心,我认为它正在使用单个核心的100%。我知道这是一款性能较弱的处理器,但下载文件并不是一个要求很高的任务,因此这种奇怪的行为让我感到困惑。

1
尝试将缓冲区大小从8k增加到256k。 - Arvind
我试过了,即使使用1MB的缓冲区大小也没有任何区别。 - agc1993
1
curl在树莓派上的速度有多快? - pvg
1
你可以尝试使用Oracle的Java而不是OpenJava,它们都预装在Raspbian中。 - Erich Kitzmueller
1
是的,这听起来像是您使用的JDK存在根本性问题。 - pvg
显示剩余5条评论
1个回答

4

我终于解决了这个问题!

我卸载了OpenJDK并安装了Oracle JDK:

sudo apt-get purge openjdk-8-jdk
sudo apt-get purge openjdk-8-jre
sudo apt-get autoremove
sudo apt-get install oracle-java8-jdk

如果Oracle的JDK已经正确安装,运行java -version命令会显示类似于以下内容:
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)

通过这个方法,下载速度从每秒约5 KB提高到每秒约450 KB,这符合我4 Mbps连接的预期。

出于好奇,我重新安装了OpenJDK,下载速度又变慢了。正如Erich Kitzmueller和pvg所建议的那样,问题出在了这个jdk上。

感谢大家的建议!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接