ODP (Open Directory Project)의 URL을 사용하여 멀티 스레드 Wget을 구현하고 있습니다. 나는 그것이 시스템 변수에 표시된 파일 기술자의 한계를 고가도로 그것 때문에 읽었습니다오픈 스레드 오류가 너무 많습니다.
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)
: 나는 다음과 같은 오류가 발생합니다 고양이/proc 디렉토리 /에서 sys /의 FS/파일 최대
동시에 시작할 수있는 스레드 수를 제한하는 방법이 있습니까? 나는 그것이 CPU를 돌릴 수있는 쓰레드의 수에 따라 자동적으로 그렇게했다고 생각했다.
감사합니다.
편집 :이는 main 메소드 내부의 메인 루프 : 방법은 내가 BufferedWritter을 만들
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()에서는 :
BufferedWriter out = new BufferedWriter(new FileWriter(cat.split("/")[1] + ".webtrec", true));
out.write(webtrec);
out.close();
ODP.run 메소드에서 파일 작성자를 처리하는 코드를 넣었습니다. 보시다시피, 나는 그것을 닫습니다. 각 쓰레드는 파일 디스크립터를 연다. 그래서 쓰레드의 수는 특정 순간에 파일 디스크립터의 수와 관련이있다. – synack
그가 10000 개의 스레드를 생성하고 각 스레드가 위의 코드를 실행하면 너무 많은 파일 열기 오류가 발생한다고 생각합니다. – Alvin
스레드를 제한하십시오. 스레드 풀을 사용하십시오. – Drona