如何解決MongoDB中Toomanyopenfiles問題

如何解決MongoDB中Toomanyopenfiles問題,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)公司專注于高密網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供高密營銷型網(wǎng)站建設(shè),高密網(wǎng)站制作、高密網(wǎng)頁設(shè)計、高密網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造高密網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供高密網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

在Linux下有時會遇到cannot open /dev/urandom Too many open files的問題。其實Linux是有文件句柄限制的,而且Linux默認(rèn)一般都是1024(阿里云主機默認(rèn)是65535)。在生產(chǎn)環(huán)境中很容易到達(dá)這個值,因此這里就會成為系統(tǒng)的瓶頸,對于MongoDB來說,默認(rèn)的文件打開數(shù)一般是不夠的,需要使用ulimit去進行設(shè)置,以下是常見的MongoDB的最大打開文件數(shù)不足的報錯。

-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命令可以對資源的可用性進行控,Linux系統(tǒng)打開文件最大數(shù)量限制(進程打開的最大文件句柄數(shù)設(shè)置)。

2. -H選項和-S選項分別表示對給定資源的硬限制(hard limit)和軟限制(soft limit)進行設(shè)置。

3. 硬限制(hard limit)一旦被設(shè)置以后就不能被非root用戶修改,軟限制(soft limit)可以增長達(dá)到硬限制(hard limit)。

4. 如果既沒有指定-H選項也沒有指定-S選項,那么硬限制(hard limit)和軟限制(soft limit)都會被設(shè)置。

5. limit的值可以是一個數(shù)值,也可以是一些特定的值,比如:hard,soft,unlimited,分別代表當(dāng)前硬件限制、當(dāng)前軟件限制、不限制。

6. 如果limit參數(shù)被省略,除非指定-H選項,否則資源當(dāng)前的軟限制(soft limit)將會被打印出來。

2. 查看文件最大打開數(shù)量限制

1 [root@redis-MySQL ~]# cat /proc/sys/fs/file-max file-max(系統(tǒng)級別)是設(shè)置系統(tǒng)所有進程一共可以打開的最大文件數(shù)量。同時一些程序可以通過setrlimit調(diào)用,設(shè)置每個進程的限制。如果得到大量使用完文件句柄的錯誤信息,應(yīng)該增加這個值
 2 184337
 3 [root@redis-mysql ~]# ulimit -n 查看用戶級的限制,阿里云服務(wù)器一般是65535
 4 65535
 5 [root@redis-mysql ~]# ulimit -a 查看當(dāng)前的各種用戶進程限制
 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)對一個進程打開的文件句柄數(shù)量的限制(也包含打開的套接字?jǐn)?shù)量),只是對用戶級別的限制
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. 查看某個進程已經(jīng)打開的文件數(shù)

[root@hotcoin-mongodb-primary ~]# ps -ef|grep -i "[m]ongod"> 4. 臨時修改ulimit的文件限制ulimit -SHn 10000 其實ulimit 命令身是分軟限制和硬限制,加-H就是硬限制,加-S就是軟限制。默認(rèn)顯示的是軟限制,如果運行ulimit 命令修改時沒有加上-H或-S,就是兩個參數(shù)一起改變。軟限制和硬限制的區(qū)別?硬限制就是實際的限制,而軟限制是警告限制,它只會給出警告。 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ù)量的限制,我們還需要設(shè)置系統(tǒng)的總限制才可以。假如,我們設(shè)置進程打開的文件句柄數(shù)是1024 ,但是系統(tǒng)總線制才500,所以所有進程最多能打開文件句柄數(shù)量500。從這里我們可以看出只設(shè)置進程的打開文件句柄的數(shù)量是不行的。所以需要修改系統(tǒng)的總限制才可以。echo  6553560 > /proc/sys/fs/file-max上面是臨時生效方法,重啟機器后會失效;永久生效方法:修改 /etc/sysctl.conf, 加入fs.file-max = 6553560 重啟生效 7. MongoDB中的設(shè)置-生產(chǎn)(nproc和nofile需要同時設(shè)置,不然登錄會出現(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  說明:* 代表針對所有用戶,noproc 是代表最大進程數(shù),nofile 是代表最大文件打開數(shù),"mongod soft nofile 655350"簡單點理解就是mongod用戶能打開的最大文件數(shù)量是655350。 8. MongoDB需要的最大文件打開數(shù)量計算-WiredTiger引擎MongoDB的WiredTiger的工作原理跟MMAPv1不太一樣,一個集合一個文件,一個索引一個文件。所以一共有多少集合,至少就會有集合數(shù)量x2個打開文件(以1集合文件+1索引文件計算)被占用。再考慮到網(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)頁題目:如何解決MongoDB中Toomanyopenfiles問題
標(biāo)題來源:http://bm7419.com/article12/jdjdgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、用戶體驗、面包屑導(dǎo)航、網(wǎng)站營銷、移動網(wǎng)站建設(shè)全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)