求救,程序卡住了怎么找原因
近期碰到多次这种情况了,很简单的一段代码,程序运行一段时间后就堵塞了,程序还运行着,但是不往控制台输出信息,不知道具体是在哪一句卡住了,也不知道用什么工具可以找出原因,请教高手帮忙提供解决思路,谢谢。执行代码如下,就是一段查询域名有没被注册的代码,从文件读取域名,大概几十万个吧,查询了一两万个就卡死了,不往控制台输出信息了
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class QueryDomain {
private static final String DOMAIN_PATH = "C:/domain/shuangpin";
private static final String DOMAIN_RESULT = "C:/domain/result";
public static void main(String[] args) throws IOException {
File file = new File(DOMAIN_PATH);
String[] domainFiles = file.list();
for (String domainFile : domainFiles) {
BufferedReader br = new BufferedReader(new FileReader(DOMAIN_PATH+File.separatorChar+domainFile));
File wfile = new File(DOMAIN_RESULT);
if (!wfile.exists()) {
wfile.mkdir();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(DOMAIN_RESULT+File.separatorChar+domainFile));
String line = null;
byte[] buffer = null;
int count = 1;
try{
while ((line = br.readLine()) != null) { //27674
Socket socket = null;
OutputStream writer = null;
InputStream reader = null;
try{
try{
socket = new Socket("whois.crsnic.net", 43);
}catch (Exception e) {
socket = new Socket("whois.verisign-grs.com", 43);
}
writer = socket.getOutputStream();
reader = socket.getInputStream();
writer.write((line+"\n").getBytes());
StringBuffer resultBuffer = new StringBuffer();
buffer = new byte[1024];
int i = 0;
while ((i = reader.read(buffer)) != -1) {
resultBuffer.append(new String(buffer, 0, i));
}
if(resultBuffer.indexOf("No match") != -1){
bw.write(line+"\n");
bw.flush();
}
System.out.println(domainFile + " " + count);
count++;
}finally{
writer.close();
reader.close();
socket.close();
}
}
}finally{
bw.close();
br.close();
}
}
System.out.println("查询完毕");
}
}