[ Mongodb ] 最大連線數爆炸的問題處理, ulimit 修改問題

Ref:

由於每次發送 notification 都會讓server連不上
這次仔細看了db的log
"connection refused because too many open connections mongodb"

之後才知道 Mongodb 預設的最大連線數是819還是820
所以在啟動 Mongodb 時要加上一個參數 --maxConns=64000
就是將最大連線數開到64000

但是!! 就是這個但是
萬萬沒想到這個 --maxConns 跟 ulimit -n 這個值有關係

如果可以下 ulimit -HSn 64000 就可以解決當然是最好的
不過我在 Ubuntu 14.04底下得到

-bash: ulimit: open files: cannot modify limit: Operation not permitted

登愣,
只好來問Google大神
得知以下幾個步驟

sudo vi /etc/security/limits.conf
* soft nofile 64000
* hard nofile 64000
root soft nofile 64000
root hard nofile 64000
( * 代表所有的 username 的樣子, 但是 root不歸屬於*中, 所以要額外再寫一次)
之後存檔, 不需重啟, 只需要重新 ssh 進來即可

(
 另外如果重新 ssh近來沒有用的話, 請去檢查 /etc/ssh/sshd_config中
 是不是有UsePAM yes, 沒有的話請補上, 然後 sudo service sshd restart就好
)

另外在 /etc/pam.d/common-session & /etc/pam.d/common-session-noninteractive
內都要加上
session required        pam_limits.so

進入尾聲了
最後我的 Ubuntu不知道為啥 用一般user權限無法透過 ulimit -HSn 64000
只能到 4096

-> 最新消息
雖然網路上有部分的人說 改完 /etc/security/limits.conf不需重開
但是Ubuntu 14.04 看起來是需要重開的 ...
重開之後就可以突破 4096 ! ( 對一般 user , root則不需要 )
另外建議在 /etc/profile 最底下新增 ulimit -HSn 64000
不然每次登入, ulimit -n 的值又會變回預設的樣子 QQ

最後改成用 sudo su 變成root
然後透過 ulimit -a 發現, 在 open files (-n) 那裡終於變成 64000了!!
只好透過 root 將 Mongodb 啟動
結束這個噩夢 ...
僅以此文來紀念今天的事件

留言

這個網誌中的熱門文章

[MySQL] schema 與資料類型優化

[翻譯] 介紹現代網路負載平衡與代理伺服器