我使用JNetPcap庫進行了數據包嗅探器。它是從另一個監視系統資源的應用程序(RAM,磁盤使用情況,活動網絡接口,運行進程等)執行的.jar文件。當監視器應用程序終止時(由用戶或不),我想讓嗅探器關閉自己,我想用監視器應用程序創建一個文件並使用fileLock鎖定它。然後在嗅探器的每個循環中,我會檢查文件是否仍然被鎖定,如果它不是(意味着監視器應用程序終止),那麼我會調用System.exit(0);運行此Java應用程序時,非分頁內核內存瘋狂增加
問題是,當它們都執行時,非分頁內核內存使用量(實際上,它不僅僅是非分頁內核內存)的速度非常快。當我單獨執行它時不會發生。
還當我同時運行它們不會發生,但在嗅探器應用程序下面的一段代碼註釋(負責檢查由監視器創建的文件是否仍處於鎖定狀態)
private void checkReleasedLock() throws IOException{
File file = new File("config\\file.lock");
FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
FileLock lock = null;
try {
lock = channel.tryLock();
if(lock != null){ //It acquired the lock => the other application is terminated.
System.exit(0);
} else {
file = null;
channel = null;
lock = null;
}
} catch (Exception e) {
file = null;
channel = null;
lock = null;
}
}
只是爲了顯示你的內存使用量的增加,這是一種收集系統資源監控應用程序的輸出:
######################################
# Beginning log: 2012-08-03 10:14:26 #
######################################
__________
RAM USAGE:
Total: 2040 MB
Free: 1260 MB (63.31 %)
Used: 720 MB (36.69 %)
Swap total: 4125 MB
Swap used: 1104 MB
Swap free: 3021 MB
Kernel Memory Total: 75876 KB
Paged: 52536 KB
Nonpaged: 23340 KB
後來幾個小時...
######################################
# Beginning log: 2012-08-03 12:14:27 #
######################################
__________
RAM USAGE:
Total: 2040 MB
Free: 1000 MB (50.37 %)
Used: 980 MB (49.63 %)
Swap total: 4125 MB
Swap used: 1307 MB
Swap free: 2818 MB
Kernel Memory Total: 213724 KB
Paged: 173724 KB
Nonpaged: 40000 KB
該代碼有問題嗎?它可能是內存泄漏的原因嗎?
您是否需要在退出之前關閉文件? – assylias 2012-08-16 12:16:06