Java代码
public static double[] getMemUsage() throws Exception {
double[] result = new double[4];
Process p = rt.exec("free -m");// 调用系统的命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
public static double[] getMemUsage() throws Exception {
double[] result = new double[4];
Process p = rt.exec("free -m");// 调用系统的命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
Java代码
int m = 0;
if (str.indexOf("/") != -1) {// MemUsed
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 3) {
result[1] = Double.parseDouble(tmp);
}
}
}
if (str.indexOf("Mem") != -1) {// MemTotal
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 2) {
result[0] = Double.parseDouble(tmp);
}
}
}
}
p.getErrorStream();
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
p.destroy();
}
// System.out.println("Performance Monitoring menUsed:" + result[1]);
return result;
在一个线程(假设1毫秒一次)中,无限循环执行上面的代码:
大概20分钟左右后出现如下异常:
java.io.IOException: Cannot run program "free": java.io.IOException: error=24, Too many open files
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at LinuxSystemTool.getMemUsage(LinuxSystemTool.java:98)
at LinuxSystemTool.exec(LinuxSystemTool.java:67)
at LinuxSystemTool.run(LinuxSystemTool.java:42)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.IOException: java.io.IOException: error=24, Too many open files
at java.lang.UNIXProcess.(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 7 more
查看网络相关资料,大概了解可能是由于打开的句柄过多造成,也没有找到解决办法,不吝赐教,谢谢
[b]问题补充:[/b]
如何清除getInputStream??请详细说明,谢谢
[b]问题补充:[/b]
Process p = rt.exec("free -m");// 调用系统的命令
大概循环执行1000次左右,就挂掉了,出现上述错误
原因可能是执行free -m,打开的缓存IO文件过多,如何释放??
已经试过的办法:
} finally {
in.close();
p.destroy();
}
都不起作用,各位大侠分析分析,不胜感谢。
[b]问题补充:[/b]
首先,非常感谢lewhwa的热情帮助。
你提供代码和方法我也做过测试,问题依旧,各个流我分别关闭,循环执行1000
次左右还是出现同样的问题。