java pid 获取句柄_Windows环境下Java获取指定进程的句柄总数

博客讨论了在使用SWT处理网银爬虫时遇到的句柄耗尽问题,导致Web服务崩溃。错误信息为`org.eclipse.swt.SWTError nomorehandles`。作者利用`wmic`命令获取Java进程的句柄计数,但长时间运行后程序会因句柄用完而终止。解决方案或优化方向可能包括句柄管理、内存优化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做网银爬虫时用swt处理密码控件,做成web服务供外部调用,时间一长总会跪掉,控制台显示org.eclipse.swt.SWTError no more handles然后java进程就没了,这个错误,注意是错误,不是异常!!!翻译过来就是句柄用完了,那么如何让程序知道自己到底用了多少句柄呢?代码如下:

public static int getHandleCount() throws IOException, InterruptedException {

String command = "wmic process where \"name='java.exe'\" Get HandleCount /value";

String result = "";

Process process = Runtime.getRuntime().exec(command);

BufferedInputStream bis = new BufferedInputStream(process.getInputStream());

BufferedReader br = new BufferedReader(new InputStreamReader(bis));

String line;

while ((line = br.readLine()) != null) {

result += line;

}

//等待执行完毕

process.waitFor();

//判断exit code

if (process.exitValue() != 0) {

System.out.println("getHandleCount exitValue() != 0");

}

bis.close();

br.close();

String count = result.replaceAll("\\D", "");

return count.equals("") ? -1 : Integer.parseInt(count);

}

主要是利用了wmic命令,关于wmic命令它其实很强大,几乎可以控制方方面面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值