Linux句柄
Linux中所有的事物或資源都是以文件的形式存在,比如消息、共享內存、連接等,句柄可以理解為指向這些文件的指針。
對於這些句柄,Linux是有數量限制的,單個進程默認可以打開的句柄數上限,可以用以下命令來查看:
$ ulimit -a
查看某個進程的句柄數上限,命令是:
$ ulimit -a PID
單個進程句柄數的修改(系統重啟后會恢復默認值)
$ ulimit -n 句柄數
永久修改單個進程句柄數
$ cat >> /etc/security/limits.conf << EOF * soft nofile 102400 * hard nofile 102400 EOF
說明:修改完成后,需要重新打開終端,使用 ulimit -a 查看句柄數
查詢系統中指定進程占用的句柄數
$ lsof -n | grep [PID|進程名]| wc -l
查詢系系統中進程占用的句柄數
$ lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | more
文件類型有以下幾種:
DIR:表示目錄。
CHR:表示字符類型。
BLK:塊設備類型。
UNIX: UNIX 域套接字。
FIFO:先進先出 (FIFO) 隊列。
IPv4:網際協議 (IP) 套接字。
LINUX對能夠打開的文件句柄的數量做了限制。限制是分為三個層面:系統層面,用戶層面和進程層面。
如果某個進程打開的文件句柄超過限制,再打開文件就會報錯。因此,在編程時,如果進程要占用大量文件句柄的話,
就要看看是否要調整最大可打開的文件句柄數,同時也要注意close釋放掉不用的文件句柄。
系統層面
$ cat /proc/sys/fs/file-max
用戶層面
$ ulimit -n
進程層面
$ cat /proc/PID/limits