2008-08-29 81 views
152

運行我的應用程序時,我有時會收到有關too many files open的錯誤。如何更改Linux中打開的文件數限制?

正在運行ulimit -a報告限制爲1024.如何增加1024以上的限制?

編輯 ulimit -n 2048導致許可錯誤。

+0

另請參閱:https://unix.stackexchange.com/a/8949/231660 – 2017-12-11 19:36:05

回答

128

你總是可以試着做一個ulimit -n 2048。這隻會重置限制當前的外殼和您指定的號碼不能超過硬限制

每個操作系統都有一個配置文件不同的硬限制設置。例如,Solaris上的硬打開文件限制可以從/ etc/system啓動時設置。

set rlim_fd_max = 166384 
set rlim_fd_cur = 8192 

在OS X上,必須在/etc/sysctl.conf中設置相同的數據。

kern.maxfilesperproc=166384 
kern.maxfiles=8192 

在Linux下,這些設置通常在/etc/security/limits.conf中。

有兩種限制:

  • 限制只是當前執行限值
  • 限制標誌,它無法通過設置軟限制
超過最大值

軟限制可以由任何用戶設置,而硬限制只能由root進行更改。 限制是一個過程的屬性。它們在創建子進程時被繼承,因此應該在初始化腳本的系統初始化過程中設置系統範圍的限制,並且應在用戶登錄期間設置用戶限制,例如使用pam_limits。

機器引導時通常會設置默認值。因此,即使您可能會在單個shell中重置ulimit,您也可能會發現它在重新啓動時會重置爲以前的值。如果您想更改默認值,您可能需要爲存在ulimit命令grep引導腳本。

+4

你能告訴我如何在Windows中使用它嗎? – Pritam 2015-04-09 07:04:20

+1

這對我幫助很大,感謝 – 2016-01-12 11:44:30

+1

對於RedHat,該文件位於/etc/security/limits.conf – Tomofumi 2017-03-17 03:48:37

82

如果您使用的是Linux並且出現權限錯誤,則需要提高/etc/limits.conf/etc/security/limits.conf文件(文件所在的位置取決於您的特定Linux版本)的允許限制。

例如,要允許機器上的任何人將打開的文件數增加到10000,請將該行添加到limits.conf文件中。

* hard nofile 10000

然後註銷重新登錄和你的系統,你應該能夠做到:

ulimit -n 10000

沒有權限錯誤。

32

1)下面的行添加到/etc/security/limits.conf

webuser hard nofile 64000 

然後登錄爲WEBUSER

su - webuser 

2)以下兩個文件爲WEBUSER

追加的.bashrc和.bash_profile中編輯通過運行文件

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile 

3)註銷,然後重新登錄並驗證更改已正確地做出:

$ ulimit -a | grep open 
open files      (-n) 64000 

這就是它和他們咚,咚熱潮。

5

如果您的某些服務正在成爲ulimits,那麼將適當的命令放入服務的init腳本有時會更容易。例如,當Apache是​​報告

[警示](11)資源暫時不可用:apr_thread_create:無法創建工作線程

儘量把ulimit -s unlimited/etc/init.d/httpd。這不需要重新啓動服務器。

相關問題