1. 程式人生 > >linux句柄泄露問題查看

linux句柄泄露問題查看

linux系統 被拒 art id號 sbin 文件的 lib 會有 linux

背景:

我們在開發linux在線server的時候常常會遇會句柄泄露的問題。由於在linux系統設計裏面遵循一切都是文件的原則。即磁盤文件、文件夾、網絡套接字、磁盤、管道等,全部這些都是文件。在我們進行打開的時候會返回一個fd,即是文件句柄。

假設頻繁的打開文件,或者打開網絡套接字而忘記釋放就會有句柄泄露的現象。在linux系統中對進程能夠調用的文件句柄數進行了限制。在默認情況下每一個進程能夠調用的最大句柄數是1024個。假設超過了這個限制,進程將無法獲取新的句柄,而從導致不能打開新的文件或者網絡套接字,對於線上server即會出現服務被拒絕的情況。

查看與改動句柄:

在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
:文件描寫敘述符。應用程序通過文件描寫敘述符識別該文件。

cwdtxt
TYPE
:文件類型,如 DIRREGIPV4FIEO
DEVICE
:指定磁盤的名稱
SIZE
:文件的大小
NODE
:索引節點(文件在磁盤上的標識)
NAME
:打開文件的確切名稱

另外通lsof命令也能夠查看占用port的進程:

/usr/sbin/lsof-i :9001

linux句柄泄露問題查看