【发布时间】:2011-05-19 23:55:45
【问题描述】:
我使用下载种子的库。但是今天发生了一些错误(日志):
以此类推,日志继续。我发现该文件存在,这是发生错误的代码的一部分:
Could not create temp files
java.io.IOException: Invalid argument
at java.io.RandomAccessFile.setLength(Native Method)
at jBittorrentAPI.DownloadManager.checkTempFiles(DownloadManager.java:261)
at jBittorrentAPI.DownloadManager.(DownloadManager.java:108)
at torrentstealer.DownloadTorrent.run(DownloadTorrent.java:65)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Could not create temp files
java.io.IOException: Invalid argument
at java.io.RandomAccessFile.setLength(Native Method)
at jBittorrentAPI.DownloadManager.checkTempFiles(DownloadManager.java:261)
at jBittorrentAPI.DownloadManager.(DownloadManager.java:108)
at torrentstealer.DownloadTorrent.run(DownloadTorrent.java:65)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Could not create temp files
java.io.IOException: Invalid argument
at java.io.RandomAccessFile.setLength(Native Method)
at jBittorrentAPI.DownloadManager.checkTempFiles(DownloadManager.java:261)
at jBittorrentAPI.DownloadManager.(DownloadManager.java:108)
at torrentstealer.DownloadTorrent.run(DownloadTorrent.java:65)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Could not create temp files
java.io.IOException: Invalid argument
at java.io.RandomAccessFile.setLength(Native Method)
at jBittorrentAPI.DownloadManager.checkTempFiles(DownloadManager.java:261)
at jBittorrentAPI.DownloadManager.(DownloadManager.java:108)
at torrentstealer.DownloadTorrent.run(DownloadTorrent.java:65)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Could not create temp files
java.io.FileNotFoundException: /root/TorrentStealer/downloads/MAME - Update ROMs (v0.141 to v0.141u2)/lah_l104.zip (Too many open files)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.(RandomAccessFile.java:212)
at jBittorrentAPI.DownloadManager.checkTempFiles(DownloadManager.java:260)
at jBittorrentAPI.DownloadManager.(DownloadManager.java:108)
at torrentstealer.DownloadTorrent.run(DownloadTorrent.java:65)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Could not create temp files
java.io.FileNotFoundException: /root/TorrentStealer/downloads/Degrassi.Junior.High.S01-S03.INTERNAL.DVDRip.XviD-FFNDVD/Degrassi.Junior.High.S01.INTERNAL.DVDRip.XviD-FFNDVDDegrassi.Junior.High.S01E10.INTERNAL.DVDRip.XviD-FFNDVDdegrassi.junior.high.s01e10.internal.dvdrip.xvid-ffndvd.r10 (Too many open files)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.(RandomAccessFile.java:212)
at jBittorrentAPI.DownloadManager.checkTempFiles(DownloadManager.java:260)
at jBittorrentAPI.DownloadManager.(DownloadManager.java:108)
at torrentstealer.DownloadTorrent.run(DownloadTorrent.java:65)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Could not create temp files
java.io.FileNotFoundException: /root/TorrentStealer/downloads/MAME - Update ROMs (v0.141 to v0.141u2)/lah_l108.zip (Too many open files)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.(RandomAccessFile.java:212)
at jBittorrentAPI.DownloadManager.checkTempFiles(DownloadManager.java:260)
at jBittorrentAPI.DownloadManager.(DownloadManager.java:108)
at torrentstealer.DownloadTorrent.run(DownloadTorrent.java:65)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
在这里调用:
/**
* Check the existence of the files specified in the torrent and if necessary,
* create them
*
* @return int
* @todo Should return an integer representing some error message...
*/
public synchronized int checkTempFiles() {
String saveas = Constants.SAVEPATH; // Should be configurable
if (this.nbOfFiles > 1)
saveas += this.torrent.saveAs + "/";
else
{
this.torrent.saveAs = this.torrent.name.get(0).toString();
}
new File(saveas).mkdirs();
for (int i = 0; i < this.nbOfFiles; i++) {
File temp = new File(saveas + ((String) (this.torrent.name.get(i))));
try {
this.output_files[i] = new RandomAccessFile(temp, "rw");
this.output_files[i].setLength((Integer)this.torrent.length.get(
i));
} catch (IOException ioe) {
System.err.println("Could not create temp files");
ioe.printStackTrace();
}
}
return 0;
} // запуск закачки
dm.startListening(49152, 65535);
dm.startTrackerUpdate();
while(true)
{
if(dm.isComplete())
{
break;
}
try
{
Thread.sleep(100);
}
catch(InterruptedException ex)
{
Logger.getLogger(DownloadTorrent.class.getName()).log(Level.SEVERE, null, ex);
}
}
dm.stopTrackerUpdate();
dm.closeTempFiles();</code></pre>
这里调用了上面的代码: ex = Executors.newFixedThreadPool(3);
for(字符串 torrentFile : torrentFiles) { ex.submit(new DownloadTorrent("/root/TorrentStealer/torrents/" + torrentFile)); } // ожидание завершения потоков загрузки файлов торрентов ex.shutdown(); 尝试 { ex.awaitTermination(30, TimeUnit.MINUTES); } 捕捉(InterruptedException ex1) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex1); } ex.shutdownNow();这里是修复«打开的文件太多»的描述: http://wiki.magnolia-cms.com/display/WIKI/Too+Many+Open+Files
我设置了 999999 max files,修复了一段时间的错误,然后设置了 9999999 进行测试,并没有真正起作用,总是发生错误。服务器重启后,运行后一瞬间不能打开9999999个文件!
所以男人们我不知道该怎么办。你能帮帮我吗?
以下是发生异常时打开文件的计数: T217:~# lsof | wc -l 结果是:2708
【问题讨论】:
-
我不知道您为什么必须发布所有这些重复的相同错误。完全浪费带宽。