在Java中下载了几个文件后,下载速度急剧降低
我正试图从SEC下载数据。我在本地下载,上传到AmazonS3,然后在本地删除这些文件。这些文件的大小范围约为10-100MB。下载几个文件后,下载速度会显著降低 下面是我的一个输出示例。请忽略5761中的在Java中下载了几个文件后,下载速度急剧降低,java,networking,download,wget,Java,Networking,Download,Wget,我正试图从SEC下载数据。我在本地下载,上传到AmazonS3,然后在本地删除这些文件。这些文件的大小范围约为10-100MB。下载几个文件后,下载速度会显著降低 下面是我的一个输出示例。请忽略5761中的190内容;我从189开始,所以前面的条目不下载。所以这里发生的事情是,进程启动并以高速下载3个文件,总共约112MB。随后,它只能以2-3MB/s的速度下载,而且永远不会恢复到最初的速度(即使在20多个文件之后,这是我让它运行的最长时间)。我还包括了上传速度——这些似乎没有降低质量,不确定这
190
内容;我从189开始,所以前面的条目不下载。所以这里发生的事情是,进程启动并以高速下载3个文件,总共约112MB。随后,它只能以2-3MB/s的速度下载,而且永远不会恢复到最初的速度(即使在20多个文件之后,这是我让它运行的最长时间)。我还包括了上传速度——这些似乎没有降低质量,不确定这是否相关
Downloading via wget: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961220.nc.tar.gz
Elapsed: 0.934
Size was 33 MB. Avg speed was 26 MB/s.
Finished uploading. Speed was 32 MB/s.
Downloading 190 of 5761: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961223.nc.tar.gz (current total: 33 MB; average speed: 14 MB/s)
Downloading via wget: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961223.nc.tar.gz
Elapsed: 1.523
Size was 41 MB. Avg speed was 26 MB/s.
Finished uploading. Speed was 59 MB/s.
Downloading 191 of 5761: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961224.nc.tar.gz (current total: 74 MB; average speed: 16 MB/s)
Downloading via wget: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961224.nc.tar.gz
Elapsed: 0.479
Size was 38 MB. Avg speed was 79 MB/s.
Finished uploading. Speed was 63 MB/s.
Downloading 192 of 5761: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961226.nc.tar.gz (current total: 112 MB; average speed: 20 MB/s)
Downloading via wget: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961226.nc.tar.gz
Elapsed: 3.859
Size was 10 MB. Avg speed was 2 MB/s.
Finished uploading. Speed was 37 MB/s.
Downloading 193 of 5761: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961227.nc.tar.gz (current total: 122 MB; average speed: 12 MB/s)
Downloading via wget: https://www.sec.gov/Archives/edgar/Feed/1996/QTR4/19961227.nc.tar.gz
Elapsed: 8.327
Size was 30 MB. Avg speed was 3 MB/s.
Finished uploading. Speed was 55 MB/s.
额外信息:
- 我很确定它在服务器上没有速率限制,因为当我在当前正在下载的URL上运行单独的
命令行时,下载速度很快wget
- 我不会把这些文件保存在内存中
- 我已经运行了好几次,在2-10次快速下载后,这种行为会持续发生
- 我将文件上传到单独的服务器后立即删除它们李>
- CPU和内存使用不会随着进程的运行而急剧增加李>
- 实际的文件/URL似乎无关紧要:我可以从任何索引(而不是189)开始下载,行为也是一样的李>
- 我在AmazonEC2上运行它,并安装了全新的OpenJDK1.8
wget
进程中,因为经过的时间在下载速度下降后增加
使用ApacheFileUtils下载
public static File downloadFileFromURL(String tmpPrefix, String url) throws IOException {
File tmp = File.createTempFile(tmpPrefix, null);
tmp.deleteOnExit();
FileUtils.copyURLToFile(new URL(url), tmp);
return tmp;
}
通过调用wget
public static File downloadFileFromURLViaWget(String url) throws IOException, InterruptedException {
System.out.println("\tDownloading via wget: " + url);
long start = System.currentTimeMillis();
Process pr = Runtime.getRuntime().exec(new String[]{"wget", "-nv", url});
pr.waitFor();
System.out.println("\tElapsed: " + (System.currentTimeMillis() - start) / 1000.0);
String fileName = url.substring(url.lastIndexOf('/') + 1);
File f = new File(fileName);
f.deleteOnExit();
return f;
}
我真的很感谢你对这方面的任何见解。我四处搜索过,但没有找到任何其他关于这个问题的帖子。当你说你不认为这是一个费率限制问题时,出于好奇,你是在使用他们的API并将其与wget进行比较,还是FileUtils与wget进行比较?他们没有API,这只是一个设计为易于刮取的网站。所以我所拥有的就是一堆直接指向文件的URL。我现在运行的Java代码版本实际上只是创建了一个wget
进程,但它开始变慢。同时,我可以在同一台机器的另一个屏幕上调用wget
,它以正常的高速下载。据我所知,服务器不可能知道正在调用哪个进程,只能知道我的IP正在请求数据。因此,由于一个wget
是快的,而来自同一台机器的其他机器是慢的,我不认为这是速率限制。这是杂乱无章的。澄清一下:我的代码使用wget
下载。两次wget
s后,速度会减慢。但是当我的代码运行时,我可以在同一个URL上手动执行wget
,而且速度很快。啊,我明白了。谢谢你的澄清。你是在线程庄园中运行这些作业,还是像在for循环中一样在队列中运行这些作业?所以有很多我看不到的东西,但都是高层次的。(1) 您可能想尝试使用线程,类似这样的方法可能会有所帮助:另外,请记住,如果您正在执行wget,并将其与下载文件进行比较,将其推送到s3存储桶,然后清除,这肯定不会是苹果对苹果,但请再次尝试线程。此外,实现异步策略也可能有所帮助。。