Ubuntu
為什麼伺服器寫入遠多於讀取磁碟
我正在執行一個Ruby on Rails 應用程序,我使用Passenger Nginx、Ruby on Rails 3.2、搜尋gem Sunspot(它使用Solr 作為其搜尋引擎)。我的應用程序在大約 6K 活躍使用者的情況下執行良好,但是當出現 15K 活躍使用者這樣的流量高峰時,它的速度令人無法接受。我檢查了 newrelic 日誌並查看了 I/O 使用率,但我不明白。
您可以看到“寫入”遠不止“讀取”。我不明白這一點,因為我猜大多數使用者都在使用與閱讀操作相關的 GET 請求。
如果您的問題與日誌寫入相關(根據 David 的建議),那麼這可以通過啟用
access_log
寫入緩沖和使用動態 gzip 壓縮(連同緩衝)在較新的 nginx 中輕鬆解決,或者, ,使用像 zfs 這樣的文件系統,它可以自動執行其中一些操作,而無需您參與。access_log /path/to/log.gz combined gzip flush=5m;
或者,您的問題可能與 nginx 記憶體的工作方式有關(特別是預設值
proxy_buffering on;
等)。Nginx 通過文件系統進行記憶體,因此,它可能會對磁碟進行各種寫入(這可能會或可能不會顯示為讀取,因為根據您的實驗方法,在寫入之後的那些讀取很可能是記憶體 -服務)。
根據您的資源,您可能會考慮將基於記憶體的磁碟設置為目錄來緩衝您的內容。否則,你也可以考慮在你的 nginx 前面設置varnish ——varnish 通過虛擬記憶體子系統完成所有的記憶體。