在ubuntu下執行ulimit,希望修改允許的最大打開文件數,但返回“不允許的操作”。
使用ulimit -a查看當前配置
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 127837 max locked memory (kbytes, -l) 16384 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 127837 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
一通搜索后,先使用如下解決辦法,修改/etc下的文件,通過修改/etc/security/limits.conf
這個配置文件來改變系統的默認限制。在文件的末尾追加一下內容:
* soft nofile 81920 * hard nofile 81920
*
代表除root以外的所有用戶,也可以設置為特定用戶的名稱,soft
表示軟限制,nofile
表示文件描述符,81920是新的默認值。
如果需要修改root,需要專門指定 root soft nofile xxx
重啟系統后,root已經生效,而普通用戶的終端依然沒有生效,查找資料,系統的相關修改,修改辦法如下:
系統級別的限制
上面說到修改只對與某一個用戶有效,Linux還有系統級別的文件描述符的限制,用戶級別的設置是不能超過系統級別的。修改系統級的限制可以通 過sysctl
命令修改:
1
|
|
file-max
代表系統內核最多可以打開的文件描述符數量,如果要設置某個進程可以打開的文件描述符數量,可以通過修改nr_open
:
1
|
|
使用sysctl
命令所做的修改也是臨時的,要永久修改系統的限制可以通過修改/proc/sys/fs/
下的文件:
1
2 |
|
關於/proc/sys/fs/
目錄下各個文件的詳細解釋,可以閱讀這篇文章fs.txt
然而是不相關的啊
最終看到有這么一句提到
PS: ,有時候更改完后使用ulimit -SHn
時仍然會報錯,這是需要在/etc/pam.d/common-session
中加入session required pam_limits.so
再次PS ,有時候經過上面的更改后使用ulimit -n
會看到默認值並沒有改變,我在ubuntu中遇到這種情況,解決辦法是先使用su username
登錄當前用戶,然后 就可以使用ulimit命令了。原因可能是gnome terminal默認是none-login的,所以我們在配置文件中的修改並沒有影響到當前的terminal。
在ubuntu的終端su username,輸入密碼后,看到默認值已經修改成正確的了。
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 127837 max locked memory (kbytes, -l) 16384 max memory size (kbytes, -m) unlimited open files (-n) 81920 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 127837 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
…………………………………………完