2014年11月8日 星期六

[record] 伺服器負載的存取檔案限制

在學校通常都是缺乏實作經驗的老師

因此都不會告訴你高負載營運時可能發生的問題

到業界也早已都調校好 很少有機會傳承經驗

尤其是吞吐量大的伺服器

負責系統架構更該該注意細節的調整來增加負載量


檢視目前限制:

  1. cat /proc/sys/fs/file-max
  2. ulimit -a

設定方法:

  1. vim /etc/sysctl.conf
    fs.file-max = 800000 
  2. vim /etc/security/limits.conf
    * soft nofile 40000
    * hard nofile 40000
    (<user/group>, <type>, <item>, <value>)
  3. ulimit -n 40000
    (只能在當下session有效, 通常用來提高當下process的限制)

設定說明:

在需要存取檔的大量吞吐系統中

當同一時間連線數大於檔案可開啟大小

將會成為造成系統崩潰原因之一

通常預設安全保護下每條process可以開檔案數為1024

所以保守設定下只要設定檔案限制在連線限制以上即可

依當今硬體效能和RAID的加持下

許多安全限制其實都可以再更高

關於檔案限制設定有兩個

  1. fs.file-max
  2. 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

沒有留言:

張貼留言