學習mongodb過程中遇到了一個棘手的問題,向mongos中導入大約1G的數據,變得越來越慢,甚至進度條一直不走了(之前也插入過1G數據,沒遇到這種情況)。自己摸索了好久,終於解決。解決方法,與大家分享
開始我以為是不是數據處理的時候出了問題,然后我又將需要導入的數據重新預處理,之后操作,還是不行,也是上述情況。
之后我又以為是mongodb集群崩了,重新搭建復制集+分片,再導入數據,還是上述問題。
那既然不是mongodb的問題,數據的問題,那就是linux的問題了。
查看了mongos.log(哈哈,后來才想到查看日志)
[ShardRegistry] Ending idle connection to host 192.168.xxx.xxx:21000 because the pool meets constraints; 1 connections to that host remain open
Google一下,大概是和什么“ 連接數 ” 有關
查看了一下mongos.conf,是有一個這么玩意,但是我設置了呀
#設置最大連接數
maxConns=20000
再連接mongos,查看最大連接數
mongos> db.serverStatus().connections //查詢最大連接數
{ "current" : 1, "available" : 818, "totalCreated" : NumberLong(1)
有問題 ,當前mongodb最大連接數=current數值+available數值,這才819,與我設置的20000,相差甚遠。后來晚上搜索一番,其實是於Linux默認進程能打開最大文件數有關
修改
第一步 編輯 /etc/security/limits.conf ,加入以下兩行
* soft nofile 65535 //應該大於上述最大連接數20000就可以
* hard nofile 65535
這里 * 表示所有用戶, 但有的linux系統不認, 需要具體的用戶名, 比如:
root soft nofile 65535
root hard nofile 65535
第二步 編輯 etc/pam.d/login , 確保有如下行:
session required pam_limits.so
第三步 修改系統總限制
修改 /etc/sysctl.conf, 加入
fs.file-max = 6553560
最后我重啟使配置生效
再次連接mongos
mongos> db.serverStatus().connections
{ "current" : 1, "available" : 19999, "totalCreated" : 3, "active" : 1 }
//最大連接數正好兩萬
后來又執行mongoimport導入數據,順利導入,還挺快
導入1G數據大約耗時十多分鍾
這是我的解決方法,大家可以參考一下
本文轉載於:https://blog.csdn.net/qq_40724463/article/details/92381684