求救,程序卡住了怎么找原因

sizhu_java 2012-10-12 05:47:37
近期碰到多次这种情况了,很简单的一段代码,程序运行一段时间后就堵塞了,程序还运行着,但是不往控制台输出信息,不知道具体是在哪一句卡住了,也不知道用什么工具可以找出原因,请教高手帮忙提供解决思路,谢谢。执行代码如下,就是一段查询域名有没被注册的代码,从文件读取域名,大概几十万个吧,查询了一两万个就卡死了,不往控制台输出信息了

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("查询完毕");
}
}
...全文
218 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
桃园闲人 2012-10-15
  • 打赏
  • 举报
回复
这个很可能是你的文件太大,导致内出不够程序出现假死状态。打开任务管理器,然后再运行程序,监控内出使用情况。还有打开JVM控制台监控JVM内存的使用情况,在DOS下运行jconsole命令。
sizhu_java 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

-。-数据库卡了? 数据太大?用多线程看看
[/Quote]

这个没涉及数据库,只是读文件然后将结果写进文件。多线程也试过,貌似不是这个问题
a8509190 2012-10-13
  • 打赏
  • 举报
回复
-。-数据库卡了? 数据太大?用多线程看看

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧