淺談linux性能優化之二十一:分析郵件系統
淺談linux性能調優之二十:模塊管理與內核編譯
http://www.2cto.com/os/201308/235094.html
郵件應用服務可以允許延遲,沒有像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隊列管理器也類似
搭建過郵件服務器的管理員應該知道,一般是自己在服務器創建虛擬域,像
[email protected],然後對應到本地一個普通用戶的一個家目錄的,以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服務器,數據庫服務器這些,對服務本身分析也很重要,對於服務工作方式,資源占用,還用安全防范等多個方面考慮調優,效果可能更好!