日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下文件描述符

發布時間:2025/3/15 linux 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下文件描述符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux下文件描述符

標簽: linuxfilelinux內核apacheunixsocket 5798人閱讀 評論(0) 收藏 舉報 分類: 調優和安全(5)

文件描述符是一個簡單的整數,用以標明每一個被進程所打開的文件和socket。第一個打開的文件是0,第二個是1,依此類推。Unix操作系統通常給每個進程能打開的文件數量強加一個限制。更甚的是,unix通常有一個系統級的限制。在UNIX/Linux平臺上,對于控制臺(Console)的標準輸入(0),標準輸出(1),標準錯誤(2)輸出也對應了三個文件描述符。

?

對于squid,因為squid 的工作方式,文件描述符的限制可能會極大的影響性能。當squid 用完所有的文件描述符后,它不能接收用戶新的連接。也就是說,用完文件描述符導致拒絕服務。直到一部分當前請求完成,相應的文件和socket 被關閉,squid不能接收新請求。當squid發現文件描述符短缺時,它會發布警告。

?

對于Apache,當使用了很多虛擬主機,而每個主機又使用了不同的日志文件時,Apache可能會遭遇耗盡文件描述符(有時也稱為file handles)的困境。 Apache使用的文件描述符總數如下:每個不同的錯誤日志文件一個、 每個其他日志文件指令一個、再加10~20個作為內部使用。Unix操作系統限制了每個進程可以使用的文件描述符數量。典型上限是64個,但可以進行擴充,直至到達一個很大的硬限制為止(a large hard-limit)。

?

linux下最大文件描述符的限制有兩個方面,一個是用戶級的限制,另外一個則是系統級限制。

以下是查看Linux文件描述符的三種方式:

[root@localhost ~]# sysctl -a | grep -i file-max --color

fs.file-max = 392036

[root@localhost ~]# cat /proc/sys/fs/file-max

392036

[root@localhost ~]# ulimit -n

1024

[root@localhost ~]#

?

系統級限制:sysctl命令和proc文件系統中查看到的數值是一樣的,這屬于系統級限制,它是限制所有用戶打開文件描述符的總和

用戶級限制ulimit命令看到的是用戶級的最大文件描述符限制,也就是說每一個用戶登錄后執行的程序占用文件描述符的總數不能超過這個限制

?

如何修改文件描述符的值?

1、修改用戶級限制

[root@localhost ~]# ulimit-SHn 10240

[root@localhost ~]# ulimit? -n

10240

[root@localhost ~]#

以上的修改只對當前會話起作用,是臨時性的,如果需要永久修改,則要修改如下:

[root@localhost ~]# grep -vE'^$|^#' /etc/security/limits.conf

*??????????????? hard nofile????????????????? 4096

[root@localhost ~]#

//默認配置文件中只有hard選項,soft 指的是當前系統生效的設置值,hard 表明系統中所能設定的最大值

[root@localhost ~]# grep -vE'^$|^#' /etc/security/limits.conf

* ???? hard ??????? nofile ????? 10240

* ???? soft ??????? nofile????? 10240

[root@localhost ~]#

// soft<=hard soft的限制不能比hard限制高

?

2、修改系統限制

[root@localhost ~]# sysctl -wfs.file-max=400000

fs.file-max = 400000

[root@localhost ~]# echo350000 > /proc/sys/fs/file-max ?//重啟后失效

[root@localhost ~]# cat /proc/sys/fs/file-max

350000

[root@localhost ~]#

//以上是臨時修改文件描述符

//永久修改把fs.file-max=400000添加到/etc/sysctl.conf中,使用sysctl -p即可

下面是摘自kernel document中關于file-max和file-nr參數的說明

file-max & file-nr:

?

The kernel allocates file handles dynamically, but as yet it doesn't free them again.

內核可以動態的分配文件句柄,但到目前為止是不會釋放它們的

?

The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate. When you get lots of error messages about running out of file handles, you might want to increase this limit.

file-max的值是linux內核可以分配的最大文件句柄數。如果你看到了很多關于打開文件數已經達到了最大值的錯誤信息,你可以試著增加該值的限制

?

Historically, the three values in file-nr denoted the number of allocated file handles, the number of allocated but unused file handles, and the maximum number of file handles. Linux 2.6 always reports 0 as the number of free file handles -- this is not an error, it just means that the number of allocated file handles exactly matches the number of used file handles.

在kernel 2.6之前的版本中,file-nr 中的值由三部分組成,分別為:1.已經分配的文件句柄數,2.已經分配單沒有使用的文件句柄數,3.最大文件句柄數。但在kernel 2.6版本中第二項的值總為0,這并不是一個錯誤,它實際上意味著已經分配的文件句柄無一浪費的都已經被使用了


參考文檔:維基百科 http://salogs.com/

總結

以上是生活随笔為你收集整理的Linux下文件描述符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。