2010-10-24 57 views
2

我有一個文件描述符增加的程序。 我看到當我執行命令ls -l/proc/5969/fd時,其中5969是java程序的pid文件描述符的數量不斷增加。 但我無法打開這些文件decriptors之一,看看有什麼文件保持打開狀態: 這裏是上市的一個例子:java程序中的文件描述符泄漏:打開的文件太多

lrwx------ 1 root root 64 oct 24 16:08 52295 -> socket:[2577706264] 
lrwx------ 1 root root 64 oct 24 16:08 52296 -> socket:[2579543392] 
lrwx------ 1 root root 64 oct 24 16:08 52297 -> socket:[2578760962] 

請幫我找到一個辦法來解決這個文件描述符泄漏知道是什麼文件保持打開並增加文件描述符編號。

回答

4

那麼從一個快速的觀察,您使用的插座文件描述符,而不是文件

在UNIX中,這兩個文件和套接字使用文件描述符,等你,你不關閉套接字的一個問題,你打開。

因此,您並未打開文件,而是實際上將端口號鎖定而不能被其他程序使用。

+1

這不是*只是*他正在綁定的端口號。在UNIX/Linux中,一個進程只允許打開一定數量的fd(文件描述符),無論是文件fd,套接字fd,管道fd或其他。 – 2010-10-24 22:56:18

+0

我不確定我是否使用套接字,並且我已鎖定端口號。 – zacky 2010-10-26 00:06:19

+0

你知道一種方法來查看打開的文件保持打開狀態,以查看打開的文件的位置嗎? – zacky 2010-10-26 00:07:03

3

嘗試

# lsof -p <pid> 

會列出所有「文件的進程的ID開放,可能會顯示你的IP /端口的套接字綁定到。如果你的程序是客戶端,你可能會被TCP RST斷開連接,而不是正確清理文件描述符。

相關問題