Я реализую многопоточный Wget с URL-адресами в Open Directory Project (ODP). Я получаю следующее сообщение об ошибке:Слишком много ошибок при открытии
java.io.FileNotFoundException: log (Too many open files)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:207)
at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
at java.io.FileWriter.<init>(FileWriter.java:78)
at ODP.run(ODP.java:103)
Я читал, что это потому, что путепроводов предел дескрипторов открытых файлов, указанных в системной переменной: кот/Труды/системы/фс/файл-макс
Есть ли способ ограничить количество потоков, которые можно запустить одновременно? Я думал, что он сделал это автоматически по количеству потоков, которые могли бы запустить CPU.
Спасибо!
Edit: это основной цикл внутри основного метода:
while (rs.next()) {
// Process entry
String rsc = rs.getString ("resource");
String tpc = rs.getString("topic");
(new ODP(rsc, tpc, rs.getString("description"))).start();
BufferedWriter outLog = new BufferedWriter(new FileWriter("log", true));
outLog.write(count + ": " + rsc + " | " + tpc + "\n");
outLog.close();
++count;
}
В ODP.run() метод создать BufferedWritter:
BufferedWriter out = new BufferedWriter(new FileWriter(cat.split("/")[1] + ".webtrec", true));
out.write(webtrec);
out.close();
Я поставил код того, как я обрабатываю файл-сценарист в методе ODP.run. Как видите, я закрываю его. Каждый поток открывает файловый дескриптор, поэтому количество потоков имеет какое-то отношение к числу дескрипторов файлов в определенный момент времени. – synack
Я думаю, что если он порождает 10000 потоков, и каждый поток запускает вышеуказанный код, он также получит слишком много ошибок при открытии файла. – Alvin
Ограничьте свои темы. Используйте threadpool. – Drona