【问题标题】:Very slow download speed using Java in Raspberry Pi 3在 Raspberry Pi 3 中使用 Java 的下载速度非常慢
【发布时间】:2017-11-28 19:24:08
【问题描述】:

我用 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 缓冲区,但平均下载速度在 205 毫秒左右为 1389 B,相当于 6.78 KB/s:

Download speed measurements

我还注意到执行此代码时的 CPU 使用率始终为 25%。由于 RPi 的 CPU 有 4 个内核,我假设它使用 100% 的单核。我知道这是一个弱处理器,但下载文件并不是一项艰巨的任务,所以这种奇怪的行为让我感到困惑。

【问题讨论】:

  • 尝试将缓冲区大小从 8k 增加到 256k
  • 我试过了。即使缓冲区大小为 1MB,也没有什么区别。
  • rpi 的 curl 速度有多快?
  • 你可以试试 Oracle 的 Java 而不是 OpenJava,两者都预装在 Raspbian 中。
  • 是的,这听起来像是你正在使用的 jdk 的基本功能。

标签: java performance httpurlconnection raspberry-pi3


【解决方案1】:

我终于解决了这个问题!

我删除了 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/s 提高到大约 450 KB/s,这是我对 4 Mbps 连接的预期。

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

感谢大家的建议!

【讨论】:

    猜你喜欢
    • 2017-08-31
    • 2015-10-25
    • 1970-01-01
    • 2016-12-28
    • 2012-10-03
    • 2021-03-18
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多