Linux服务器文件描述符最大值修改
生活随笔
收集整理的這篇文章主要介紹了
Linux服务器文件描述符最大值修改
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文件描述符的有效范圍是 0 到 OPEN_MAX。Linux 2.4.22 強制規定最多不能超過 1,048,576 。
文件描述符是由無符號整數表示的句柄,進程使用它來標識打開的文件。文件描述符與包括相關信息(如文件的打開模式、文件的位置類型、文件的初始類型等)的文件對象相關聯,這些信息被稱作文件的上下文。
如何創建文件描述符
進程獲取文件描述符最常見的方法是通過本機子例程open或create獲取或者通過從父進程繼承。后一種方法允許子進程同樣能夠訪問由父進程使用的文件。文件描述符對于每個進程一般是唯一的。當用fork子例程創建某個子進程時,該子進程會獲得其父進程所有文件描述符的副本,這些文件描述符在執行fork時打開。在由fcntl、dup和dup2子例程復制或拷貝某個進程時,會發生同樣的復制過程。
第二個異常在JVM進程缺乏文件描述符時出現(盡管在執行forkAndExec()子例程時不需要新的文件描述符來復制父進程的文件描述符)。對于每個進程,操作系統內核在u_block結構中維護文件描述符表,所有的文件描述符都在該表中建立索引。
缺點
文件描述符的概念存在兩大缺點:
在非UNIX/Linux操作系統上(如Windows NT),無法基于這一概念進行編程。
由于文件描述符在形式上不過是個整數,當代碼量增大時,會使編程者難以分清哪些整數意味著數據,那些意味著文件描述符。因此,完成的代碼可讀性也就會變得很差。
如何在不同平臺上定義文件描述符的數量
文件描述符極限以及可分配給進程的最大大小由資源限制來定義。這些值應當按照在WebLogicServer文檔中建議的、特定于操作系統的文件描述符值來設置:
對于WLS8.1:調整硬件、操作系統和網絡性能
對于WLS7.0:調整硬件、操作系統和網絡性能
對于WLS6.1:調整硬件、操作系統和網絡性能
Unix和Linux都有文件描述符。不過,二者的主要區別在于如何設置文件描述符的硬極限值、缺省值和配置過程。
Solaris
/usr/bin/ulimit實用程序定義允許單個進程使用的文件描述符的數量。它的最大值在rlim_fd_max中定義,在缺省情況下,它設置為65,536。只有root用戶才能修改這些內核值。
Linux
管理用戶可以在etc/security/limits.conf配置文件中設置他們的文件描述符極限,如下例所示。
softnofile1024
hardnofile4096
系統級文件描述符極限還可以通過將以下三行添加到/etc/rc.d/rc.local啟動腳本中來設置:
#Increasesystem-widefiledescriptorlimit.
echo4096>/proc/sys/fs/file-max
echo16384>/proc/sys/fs/inode-max
Window
在Windows操作系統上,文件描述符被稱作文件句柄。在Windows2000服務器上,打開文件的句柄極限設置為16,384。此數量可以在任務管理器的性能摘要中監視。
HP-UX
nfile定義打開文件的最大數量。此值通常由以下公式來確定:((NPROC*2)+1000),其中NPROC通常為:((MAXUSERS*5)+64)。如果MAXUSERS等于400,則經過計算得到此值為5128。通常可以將此值設高一些。maxfiles是每個進程的軟文件極限,maxfiles_lim是每個進程的硬文件極限。
AIX
文件描述符極限在/etc/security/limits文件中設置,它的缺省值是2000。此極限可以通過ulimit命令或setrlimit子例程來更改。最大大小由OPEN_MAX常數來定義。
另外解決方法
對于ANSI C規范中定義的標準庫的文件I/O操作。ANSI C規范給出了一個解決方法,就是使用FILE結構體的指針。事實上,UNIX/Linux平臺上的FILE結構體的實現中往往都是封裝了文件描述符變量在其中。
在部署該類服務器時修改文件描述符是必要進行的操作,linux中有修改最大文件描述符的方式:
?
修改limits.conf文件,永久更改系統文件描述符最大值
vi /etc/security/limits.conf文件,在最后加入如下兩行
* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? soft ? ?nofile ?65536
* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? hard ? ?nofile ?65536
或者使用下列命令直接插入:
echo "* ? ? ? ? ? ? ? soft ? ?nofile ?65536" >>/etc/security/limits.conf
echo "* ? ? ? ? ? ? ? hard ? ?nofile ?65536" >>/etc/security/limits.conf
?
這樣任何用戶連接都是變為修改的值。
文件描述符是由無符號整數表示的句柄,進程使用它來標識打開的文件。文件描述符與包括相關信息(如文件的打開模式、文件的位置類型、文件的初始類型等)的文件對象相關聯,這些信息被稱作文件的上下文。
如何創建文件描述符
進程獲取文件描述符最常見的方法是通過本機子例程open或create獲取或者通過從父進程繼承。后一種方法允許子進程同樣能夠訪問由父進程使用的文件。文件描述符對于每個進程一般是唯一的。當用fork子例程創建某個子進程時,該子進程會獲得其父進程所有文件描述符的副本,這些文件描述符在執行fork時打開。在由fcntl、dup和dup2子例程復制或拷貝某個進程時,會發生同樣的復制過程。
第二個異常在JVM進程缺乏文件描述符時出現(盡管在執行forkAndExec()子例程時不需要新的文件描述符來復制父進程的文件描述符)。對于每個進程,操作系統內核在u_block結構中維護文件描述符表,所有的文件描述符都在該表中建立索引。
缺點
文件描述符的概念存在兩大缺點:
在非UNIX/Linux操作系統上(如Windows NT),無法基于這一概念進行編程。
由于文件描述符在形式上不過是個整數,當代碼量增大時,會使編程者難以分清哪些整數意味著數據,那些意味著文件描述符。因此,完成的代碼可讀性也就會變得很差。
如何在不同平臺上定義文件描述符的數量
文件描述符極限以及可分配給進程的最大大小由資源限制來定義。這些值應當按照在WebLogicServer文檔中建議的、特定于操作系統的文件描述符值來設置:
對于WLS8.1:調整硬件、操作系統和網絡性能
對于WLS7.0:調整硬件、操作系統和網絡性能
對于WLS6.1:調整硬件、操作系統和網絡性能
Unix和Linux都有文件描述符。不過,二者的主要區別在于如何設置文件描述符的硬極限值、缺省值和配置過程。
Solaris
/usr/bin/ulimit實用程序定義允許單個進程使用的文件描述符的數量。它的最大值在rlim_fd_max中定義,在缺省情況下,它設置為65,536。只有root用戶才能修改這些內核值。
Linux
管理用戶可以在etc/security/limits.conf配置文件中設置他們的文件描述符極限,如下例所示。
softnofile1024
hardnofile4096
系統級文件描述符極限還可以通過將以下三行添加到/etc/rc.d/rc.local啟動腳本中來設置:
#Increasesystem-widefiledescriptorlimit.
echo4096>/proc/sys/fs/file-max
echo16384>/proc/sys/fs/inode-max
Window
在Windows操作系統上,文件描述符被稱作文件句柄。在Windows2000服務器上,打開文件的句柄極限設置為16,384。此數量可以在任務管理器的性能摘要中監視。
HP-UX
nfile定義打開文件的最大數量。此值通常由以下公式來確定:((NPROC*2)+1000),其中NPROC通常為:((MAXUSERS*5)+64)。如果MAXUSERS等于400,則經過計算得到此值為5128。通常可以將此值設高一些。maxfiles是每個進程的軟文件極限,maxfiles_lim是每個進程的硬文件極限。
AIX
文件描述符極限在/etc/security/limits文件中設置,它的缺省值是2000。此極限可以通過ulimit命令或setrlimit子例程來更改。最大大小由OPEN_MAX常數來定義。
另外解決方法
對于ANSI C規范中定義的標準庫的文件I/O操作。ANSI C規范給出了一個解決方法,就是使用FILE結構體的指針。事實上,UNIX/Linux平臺上的FILE結構體的實現中往往都是封裝了文件描述符變量在其中。
在部署該類服務器時修改文件描述符是必要進行的操作,linux中有修改最大文件描述符的方式:
?
修改limits.conf文件,永久更改系統文件描述符最大值
vi /etc/security/limits.conf文件,在最后加入如下兩行
* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? soft ? ?nofile ?65536
* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? hard ? ?nofile ?65536
或者使用下列命令直接插入:
echo "* ? ? ? ? ? ? ? soft ? ?nofile ?65536" >>/etc/security/limits.conf
echo "* ? ? ? ? ? ? ? hard ? ?nofile ?65536" >>/etc/security/limits.conf
?
這樣任何用戶連接都是變為修改的值。
總結
以上是生活随笔為你收集整理的Linux服务器文件描述符最大值修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNIX环境高级编程》笔记--getrl
- 下一篇: IO模型(select, poll, e