如何解決MongoDB中Toomanyopenfiles問題,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)公司專注于高密網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供高密營(yíng)銷型網(wǎng)站建設(shè),高密網(wǎng)站制作、高密網(wǎng)頁(yè)設(shè)計(jì)、高密網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造高密網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供高密網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
在Linux下有時(shí)會(huì)遇到cannot open /dev/urandom Too many open files的問題。其實(shí)Linux是有文件句柄限制的,而且Linux默認(rèn)一般都是1024(阿里云主機(jī)默認(rèn)是65535)。在生產(chǎn)環(huán)境中很容易到達(dá)這個(gè)值,因此這里就會(huì)成為系統(tǒng)的瓶頸,對(duì)于MongoDB來說,默認(rèn)的文件打開數(shù)一般是不夠的,需要使用ulimit去進(jìn)行設(shè)置,以下是常見的MongoDB的最大打開文件數(shù)不足的報(bào)錯(cuò)。
-server: log pre-alloc server error: Too many open files 2019-01-31T22:18:26.744+0800 E STORAGE [thread1] WiredTiger (24) [1548944306:744242][5485:0x7f03b00ea700], log-server: log server error: Too many open files 2019-01-31T22:18:27.518+0800 E - [conn51828] cannot open /dev/urandom Too many open files
1. ulimt命令用途
1. 利用ulimit命令可以對(duì)資源的可用性進(jìn)行控,Linux系統(tǒng)打開文件最大數(shù)量限制(進(jìn)程打開的最大文件句柄數(shù)設(shè)置)。
2. -H選項(xiàng)和-S選項(xiàng)分別表示對(duì)給定資源的硬限制(hard limit)和軟限制(soft limit)進(jìn)行設(shè)置。
3. 硬限制(hard limit)一旦被設(shè)置以后就不能被非root用戶修改,軟限制(soft limit)可以增長(zhǎng)達(dá)到硬限制(hard limit)。
4. 如果既沒有指定-H選項(xiàng)也沒有指定-S選項(xiàng),那么硬限制(hard limit)和軟限制(soft limit)都會(huì)被設(shè)置。
5. limit的值可以是一個(gè)數(shù)值,也可以是一些特定的值,比如:hard,soft,unlimited,分別代表當(dāng)前硬件限制、當(dāng)前軟件限制、不限制。
6. 如果limit參數(shù)被省略,除非指定-H選項(xiàng),否則資源當(dāng)前的軟限制(soft limit)將會(huì)被打印出來。
2. 查看文件最大打開數(shù)量限制
1 [root@redis-MySQL ~]# cat /proc/sys/fs/file-max file-max(系統(tǒng)級(jí)別)是設(shè)置系統(tǒng)所有進(jìn)程一共可以打開的最大文件數(shù)量。同時(shí)一些程序可以通過setrlimit調(diào)用,設(shè)置每個(gè)進(jìn)程的限制。如果得到大量使用完文件句柄的錯(cuò)誤信息,應(yīng)該增加這個(gè)值 2 184337 3 [root@redis-mysql ~]# ulimit -n 查看用戶級(jí)的限制,阿里云服務(wù)器一般是65535 4 65535 5 [root@redis-mysql ~]# ulimit -a 查看當(dāng)前的各種用戶進(jìn)程限制 6 core file size (blocks, -c) 0 7 data seg size (kbytes, -d) unlimited 8 scheduling priority (-e) 0 9 file size (blocks, -f) unlimited 10 pending signals (-i) 7282 11 max locked memory (kbytes, -l) 64 12 max memory size (kbytes, -m) unlimited 13 open files (-n) 65535 linux操作系統(tǒng)對(duì)一個(gè)進(jìn)程打開的文件句柄數(shù)量的限制(也包含打開的套接字?jǐn)?shù)量),只是對(duì)用戶級(jí)別的限制 14 pipe size (512 bytes, -p) 8 15 POSIX message queues (bytes, -q) 819200 16 real-time priority (-r) 0 17 stack size (kbytes, -s) 8192 18 cpu time (seconds, -t) unlimited 19 max user processes (-u) 7282 20 virtual memory (kbytes, -v) unlimited 21 file locks (-x) unlimited
3. 查看某個(gè)進(jìn)程已經(jīng)打開的文件數(shù)
[root@hotcoin-mongodb-primary ~]# ps -ef|grep -i "[m]ongod"> 4. 臨時(shí)修改ulimit的文件限制ulimit -SHn 10000 其實(shí)ulimit 命令身是分軟限制和硬限制,加-H就是硬限制,加-S就是軟限制。默認(rèn)顯示的是軟限制,如果運(yùn)行ulimit 命令修改時(shí)沒有加上-H或-S,就是兩個(gè)參數(shù)一起改變。軟限制和硬限制的區(qū)別?硬限制就是實(shí)際的限制,而軟限制是警告限制,它只會(huì)給出警告。 5. 永久生效要想ulimits 的數(shù)值永久生效,必須修改配置文件/etc/security/limits.conf,在該配置文件中添加以下內(nèi)容 1 * soft nofile 65535 2 * hard nofile 65535 3 echo "* soft nofile 65535"> 6. 修改系統(tǒng)的總的限制其實(shí)上面的修改都是對(duì)一個(gè)進(jìn)程打開的文件句柄數(shù)量的限制,我們還需要設(shè)置系統(tǒng)的總限制才可以。假如,我們?cè)O(shè)置進(jìn)程打開的文件句柄數(shù)是1024 ,但是系統(tǒng)總線制才500,所以所有進(jìn)程最多能打開文件句柄數(shù)量500。從這里我們可以看出只設(shè)置進(jìn)程的打開文件句柄的數(shù)量是不行的。所以需要修改系統(tǒng)的總限制才可以。echo 6553560 > /proc/sys/fs/file-max上面是臨時(shí)生效方法,重啟機(jī)器后會(huì)失效;永久生效方法:修改 /etc/sysctl.conf, 加入fs.file-max = 6553560 重啟生效 7. MongoDB中的設(shè)置-生產(chǎn)(nproc和nofile需要同時(shí)設(shè)置,不然登錄會(huì)出現(xiàn)警告) 1 [root@hotcoin-mongodb-primary ~]# tail -10 /etc/security/limits.conf 2 3 # End of file 4 root soft nofile 655350 5 root hard nofile 655350 6 * soft nofile 655350 7 * hard nofile 655350 8 * soft nproc 655350 9 * hard nproc 655350 10 mongod soft nofile 655350 11 mongod soft nproc 655350 12 [root@hotcoin-mongodb-primary ~]# cat /proc/sys/fs/file-max 13 1610694 說明:* 代表針對(duì)所有用戶,noproc 是代表最大進(jìn)程數(shù),nofile 是代表最大文件打開數(shù),"mongod soft nofile 655350"簡(jiǎn)單點(diǎn)理解就是mongod用戶能打開的最大文件數(shù)量是655350。 8. MongoDB需要的最大文件打開數(shù)量計(jì)算-WiredTiger引擎MongoDB的WiredTiger的工作原理跟MMAPv1不太一樣,一個(gè)集合一個(gè)文件,一個(gè)索引一個(gè)文件。所以一共有多少集合,至少就會(huì)有集合數(shù)量x2個(gè)打開文件(以1集合文件+1索引文件計(jì)算)被占用。再考慮到網(wǎng)絡(luò)連接數(shù)量,要保證足夠大的open files值。 參考資料 Too many open files的四種解決辦法linux中ulimit作用Linux-ulimit使用
看完上述內(nèi)容,你們掌握如何解決MongoDB中Toomanyopenfiles問題的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁(yè)題目:如何解決MongoDB中Toomanyopenfiles問題
標(biāo)題來源:http://www.chinadenli.net/article12/jdjdgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、用戶體驗(yàn)、面包屑導(dǎo)航、網(wǎng)站營(yíng)銷、移動(dòng)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)