郵件應用服務能夠容許延遲,沒有像web,數據庫那樣實時性要求強,響應快。對於這種應用在設計上就比較特別,我給出postfix的進程信息:
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
#628 inet n - n - - qmqpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
能夠看出pickup進程會週期的被喚醒來檢查新收到的郵件,而後交給cleanup作處理,這些信息管理員能夠手動調節,qmgr隊列管理器也相似
搭建過郵件服務器的管理員應該知道,通常是本身在服務器建立虛擬域,像XXXXXX@example.com,而後對應到本地一個普通用戶的一個家目錄的,以XXXXXX爲名的目錄裏不一樣的文件即是XXXXXX用戶的信件,不少的小文件(通常使用maildir形式存儲信件,mailbox存在文件鎖的問題)這裏能夠明文的哦。這裏要注意的是linux下郵件服務器如果採用ext3,ext4文件系統,就可能出現inode耗盡的狀況,具體能夠參考我以前寫過的「文件系統格式化的考慮」,固然若使用gfs這樣的集羣文件系統,就沒必要考慮這樣的問題了
磁盤:
郵件系統的一個最大的問題是:不是不少大文件的讀寫,而是不少小文件的讀寫,並且這些讀寫請求是來自同一時間的多個進程或者線程:假設一個信件由服務器postfix收到,先是pickup發現並讀出,再交給cleanup,可能調用rewrite對地址進行改寫,最後在進入incoming隊列,由smtp處理
對不少小文件的應用服務,推薦使用deadline算法進行I/O調度
內存:
對於postfix而言,它的每個進程不會消耗太多的內存,咱們指望的是大量的內存被自動使用到磁盤緩存中來提升磁盤I/O速率,固然這個咱們不須要操做,linux幫咱們完成了!Linux虛擬內存管理默認將全部空閒內存空間都做爲硬盤緩存。所以在擁有數GB內存的生產性Linux系統中,常常能夠看到可用的內存只有20MB。
處理器:
對於郵件系統,無論是smtp,imap對CPU的佔用都不是很大
網絡:
儘管對於郵件系統而言,會頻繁的使用網絡子系統,可是郵件系統的瓶頸仍是磁盤的吞吐而不是網絡的吞吐,對應這種應用不要求交互,延遲是容許!固然對於一些經常使用的網絡內核參數仍是有必要調節的!
這些只是在系統級別簡單分析一下,對於應用服務:郵件服務器,Web服務器,數據庫服務器這些,對服務自己分析也很重要,對於服務工做方式,資源佔用,還用安全防範等多個方面考慮調優,效果可能更好!
西郵-小宋