0
我的java代碼似乎有句柄泄漏,哪個調試工具適合檢查?如何檢查Java程序的文件句柄泄漏?
我的java代碼似乎有句柄泄漏,哪個調試工具適合檢查?如何檢查Java程序的文件句柄泄漏?
lsof命令將列出與程序關聯的所有文件。
由於沒有已經給出,我加入我的
package org.gradle;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class FileDescriptorDemoOne {
static int index_count;
public static void main(String[] args) throws IOException {
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() {
public void run() {
index_count++;
// do stuff
File file = new File("/tmp/helloworld.txt");
FileDescriptor fd;
FileOutputStream fos1;
try {
fos1 = new FileOutputStream(file);
fd = fos1.getFD();
//passing FileDescriptor to another FileOutputStream
FileOutputStream fos2 = new FileOutputStream(fd);
fos2.write(index_count++);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 0, 5, TimeUnit.SECONDS);
}
}
顯然上面的代碼會泄漏文件描述符每隔幾秒鐘。
爲了趕上這個運用
lsof的| grep的HelloWorld的
java 6015 vic 8w REG 1,4 12 86076888 /private/tmp/helloworld.txt
java 6015 vic 9w REG 1,4 12 86076888 /private/tmp/helloworld.txt
java 6015 vic 10w REG 1,4 12 86076888 /private/tmp/helloworld.txt
分享你的代碼,以便其他人可以看到你在說什麼。 – 2012-07-31 23:07:45
讓我猜:「FileNotFoundException:太多打開的文件」? 如果在java調試器*中有更多的方法來跟蹤打開的文件句柄,那將會很不錯。大多數時候單獨使用「lsof」是不足以真正追蹤這樣的錯誤的。 + 1'd – 2012-08-01 05:52:48