Linux运维:ulimit命令修改打开文件的句柄数
文章目錄
- ulimit命令語(yǔ)法
- 參數(shù)說(shuō)明:
- 查看本機(jī)設(shè)置的參數(shù):
- ulimit修改打開(kāi)文件的句柄數(shù)
- 場(chǎng)景
- 解釋:
- 修改
- 1.修改file-max
- 2.修改ulimit的open file
- 注意事項(xiàng)
- daemon進(jìn)程無(wú)效
- 服務(wù)已啟動(dòng)動(dòng)態(tài)調(diào)整無(wú)效
ulimit命令語(yǔ)法
ulimit [-aHS][-c <core文件上限>][-d <數(shù)據(jù)節(jié)區(qū)大小>][-f <文件大小>][-m <內(nèi)存大小>][-n <文件數(shù)目>][-p <緩沖區(qū)大小>][-s <堆疊大小>][-t <CPU時(shí)間>][-u <程序數(shù)目>][-v <虛擬內(nèi)存大小>]參數(shù)說(shuō)明:
| -a | all | 顯示目前資源限制的設(shè)定。 |
| -c | core file size | <core文件上限>設(shè)定core文件的最大值,單位為區(qū)塊。 |
| -d | data seg size | <數(shù)據(jù)節(jié)區(qū)大小> 程序數(shù)據(jù)節(jié)區(qū)的最大值,單位為KB。 |
| -f | file size | <文件大小> shell所能建立的最大文件,單位為區(qū)塊。 |
| -H | hard | 設(shè)定資源的硬性限制,管理員設(shè)置的上限。 |
| -S | soft | 軟設(shè)定資源的彈性限制,小于hard設(shè)置的上限。 |
| -m | max locked memory | 設(shè)置內(nèi)存中一些對(duì)程序性能影響較大的數(shù)據(jù)lock,指定可使用內(nèi)存的上限,單位為KB。 |
| -m | max memory size | <內(nèi)存大小> 指定可使用內(nèi)存的上限,單位為KB。 |
| -n | open files | <文件數(shù)目> 指定同一時(shí)間最多可開(kāi)啟的文件數(shù)。 |
| -p | pipe size | <緩沖區(qū)大小> 指定管道緩沖區(qū)的大小,單位512字節(jié)。 |
| -s | stack size | <堆棧大小> 指定堆棧的上限,單位為KB。 |
| -t | cpu time | <CPU時(shí)間> 指定CPU使用時(shí)間的上限,單位為秒。 |
| -u | max user processes | <程序數(shù)目> 用戶最多可開(kāi)啟的程序數(shù)目。 |
| -v | virtual memory | <虛擬內(nèi)存大小> 指定可使用的虛擬內(nèi)存上限,單位為KB。 |
查看本機(jī)設(shè)置的參數(shù):
[root@hadoop-master 2477]# 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) 7146 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 102400 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) 7146 virtual memory (kbytes, -v) unlimited file locks (-x) unlimitedulimit修改打開(kāi)文件的句柄數(shù)
場(chǎng)景
linux系統(tǒng)默認(rèn)open files數(shù)目為1024, 有時(shí)應(yīng)用程序會(huì)報(bào)Too many open files的錯(cuò)誤,是因?yàn)閛pen files 數(shù)目不夠。這就需要修改ulimit和file-max。特別是提供大量靜態(tài)文件訪問(wèn)的web服務(wù)器,緩存服務(wù)器(如squid), 更要注意這個(gè)問(wèn)題。
網(wǎng)上的教程,都只是簡(jiǎn)單說(shuō)明要如何設(shè)置ulimit和file-max, 但這兩者之間的關(guān)系差別,并沒(méi)有仔細(xì)說(shuō)明
解釋:
1. file-max man proc,可得到file-max的描述:/proc/sys/fs/file-max This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be used by a process to set the per-process limit, RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages about running out of file handles, try increasing this value: 即file-max是設(shè)置 系統(tǒng)所有進(jìn)程一共可以打開(kāi)的文件數(shù)量 。同時(shí)一些程序可以通過(guò)setrlimit調(diào)用,設(shè)置每個(gè)進(jìn)程的限制。如果得到大量使用完文件句柄的錯(cuò)誤信息,是應(yīng)該增加這個(gè)值。 也就是說(shuō),這項(xiàng)參數(shù)是系統(tǒng)級(jí)別的。2. ulimit Provides control over the resources available to the shell and to processes started by it, on systems that allow such control. 即設(shè)置當(dāng)前shell以及由它啟動(dòng)的進(jìn)程的資源限制。 顯然,對(duì)服務(wù)器來(lái)說(shuō),file-max, ulimit都需要設(shè)置,否則就可能出現(xiàn)文件描述符用盡的問(wèn)題修改
1.修改file-max
# echo 102400 > /proc/sys/fs/file-max # sysctl -w "fs.file-max=102400",前面2種重啟機(jī)器后會(huì)恢復(fù)為默認(rèn)值 # vim /etc/sysctl.conf, 加入以下內(nèi)容,重啟生效 fs.file-max=102400 net.nf_conntrack_max=1024000 net.netfilter.nf_conntrack_max=10240002.修改ulimit的open file
系統(tǒng)默認(rèn)的ulimit對(duì)文件打開(kāi)數(shù)量的限制是1024
方式一(臨時(shí)修改,推出后恢復(fù)默認(rèn)值):
方式二(永久修改,需要重啟主機(jī)):
# vim /etc/security/limits.conf //加入以下配置,重啟即可生效 * hard nofile 102400 * soft nofile 102400按照第二種方式重啟后,再看,發(fā)現(xiàn)句柄數(shù)已經(jīng)改變了
[root@hadoop-master 2477]# ulimit -n 102400注意事項(xiàng)
daemon進(jìn)程無(wú)效
為了讓一個(gè)程序的open files數(shù)目擴(kuò)大,可以在啟動(dòng)腳本前面加上ulimit -HSn 102400命令。但當(dāng)程序是一個(gè)daemon時(shí),可能這種方法無(wú)效,因?yàn)闆](méi)有終端。
服務(wù)已啟動(dòng)動(dòng)態(tài)調(diào)整無(wú)效
如果某項(xiàng)服務(wù)已經(jīng)啟動(dòng),再動(dòng)態(tài)調(diào)整ulimit是無(wú)效的,特別是涉及到線上業(yè)務(wù)就更麻煩了。
這時(shí),可以考慮通過(guò)修改/proc/’程序pid’/limits來(lái)實(shí)現(xiàn)動(dòng)態(tài)修改!!!(筆者通過(guò)VIM修改后報(bào)沒(méi)有權(quán)限,目前無(wú)法通過(guò)這種方式修改),可以通過(guò)啟動(dòng)前修改的方式達(dá)到修改的目的。
例如:首先修改本地的打開(kāi)文件數(shù),從2048修改為1024
然后啟動(dòng)服務(wù),并查看ulimit參數(shù)
[root@hadoop-master shell-asy]# nohup sh start-syn.sh & [2] 4542 [root@hadoop-master shell-asy]# nohup: 忽略輸入并把輸出追加到"nohup.out"[root@hadoop-master shell-asy]# cat /proc/4542/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 7146 7146 processes Max open files 1024 1024 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 7146 7146 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us發(fā)現(xiàn)我們需要修改的文件句柄數(shù)已經(jīng)修改了
總結(jié)
以上是生活随笔為你收集整理的Linux运维:ulimit命令修改打开文件的句柄数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql创建数据库并且指定utf-8编
- 下一篇: Linux运维:常用的压缩解压缩命令(z