Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux系統常見問題解答 >> linux句柄洩露問題查看

linux句柄洩露問題查看

日期:2017/1/20 17:40:44      編輯:Linux系統常見問題解答

背景:

我們在開發linux在線服務器的時候經常會遇會句柄洩露的問題。因為在linux系統設計裡面遵循一切都是文件的原則,即磁盤文件、目錄、網絡套接字、磁盤、管道等,所有這些都是文件,在我們進行打開的時候會返回一個fd,即是文件句柄。如果頻繁的打開文件,或者打開網絡套接字而忘記釋放就會有句柄洩露的現象。在linux系統中對進程可以調用的文件句柄數進行了限制,在默認情況下每個進程可以調用的最大句柄數是1024個,如果超過了這個限制,進程將無法獲取新的句柄,而從導致不能打開新的文件或者網絡套接字,對於線上服務器即會出現服務被拒絕的情況。

查看與修改句柄:

在linux系統中可以通過ulimit–n查看每個進程限制的最大句柄數,通過ulimit –HSn 10240修改進程的最大句柄數。當句柄數目達到限制後,就回出現”too many files open”。

查看進程占用的句柄數有幾種辦法:

1) 通過cat/proc/pid/fd可以查看線程pid號打開的線程;

2) 通過lsof命令, /usr/sbin/lsof-p 21404 命令結果如下:

 

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
vas 21404 root cwd DIR 8,3 4096 30195729 /home/users/root/vas
vas 21404 root rtd DIR 8,2 4096 2 / 
vas 21404 root txt REG 8,3 112201650 30195914 /home/users/root/vas
vas 21404 root mem REG 0,0 0 [heap] (stat: No such file or directory)
vas 21404 root mem REG 8,2 105080 339377 /lib64/ld-2.3.4.so
vas 21404 root mem REG 8,2 1493186 339367 /lib64/tls/libc-2.3.4.so
vas 21404 root mem REG 8,2 17943 339392 /lib64/libdl-2.3.4.so
vas 21404 root mem REG 8,2 613297 339369 /lib64/tls/libm-2.3.4.so
vas 21404 root mem REG 8,2 79336 490463 /usr/lib64/libz.so.1.2.1.2

 

COMMAND:進程的名稱 
PID:進程標識符 
USER:進程所有者 
FD:文件描述符,應用程序通過文件描述符識別該文件。如 cwd、txt等 
TYPE:文件類型,如 DIR、REG、IPV4、FIEO等 
DEVICE:指定磁盤的名稱 
SIZE:文件的大小 
NODE:索引節點(文件在磁盤上的標識)
NAME:打開文件的確切名稱

另外通lsof命令也可以查看占用端口的進程:

/usr/sbin/lsof-i :9001

Copyright © Windows教程網 All Rights Reserved