因此都不會告訴你高負載營運時可能發生的問題
到業界也早已都調校好 很少有機會傳承經驗
尤其是吞吐量大的伺服器
負責系統架構更該該注意細節的調整來增加負載量
檢視目前限制:
- cat /proc/sys/fs/file-max
- ulimit -a
設定方法:
- vim /etc/sysctl.conf
fs.file-max = 800000 - vim /etc/security/limits.conf
* soft nofile 40000
* hard nofile 40000
(<user/group>, <type>, <item>, <value>) - ulimit -n 40000
(只能在當下session有效, 通常用來提高當下process的限制)
設定說明:
當同一時間連線數大於檔案可開啟大小
將會成為造成系統崩潰原因之一
通常預設安全保護下每條process可以開檔案數為1024
所以保守設定下只要設定檔案限制在連線限制以上即可
依當今硬體效能和RAID的加持下
許多安全限制其實都可以再更高
關於檔案限制設定有兩個
- fs.file-max
- open file limit
第1項為OS對檔案描述檔的限制,第2項是對Process的限制 (但限制是綁user/group)
如果你需要同時開非常多不同檔案,則1, 2都必須開啟
若針對單一檔案或少數檔案進行大量的存取則修改2即可 (ex. log file)
對資料庫來說通常都是單一檔案為主
並且會透過memory來加速檔案存取及減少檔案存取
所以通常都是修改第2項即可,目前還沒想到什麼狀況下需要用到1
但我觀察許多網路玩家通常都是兩個會同時修改
這應該不是最好的設定選擇方案
我想只有多年經驗的系統架構師才會知道
附註Mongo建議的系統設定:
- -f (file size): unlimited
- -t (cpu time): unlimited
- -v (virtual memory): unlimited
- -n (open files): 64000
- -m (memory size): unlimited
- -u (processes/threads): 64000
沒有留言:
張貼留言