Ssh

tail 可以減慢 Linux(ext3)上的日誌寫入速度嗎?

  • November 5, 2014

我想知道 tailf 是否會生成阻塞 I/O,這會由於日誌記錄而減慢伺服器響應速度。

例如。假設以下設置:

通過終端管理的 Debian 5.1 linux 伺服器 (foo)(foo 託管在 EC2 上)。

Foo 執行多個應用程序,每個應用程序都寫入自己的日誌文件。例如,Apache httpd 到 /var/log/apache/access.log 和 Tomcat 5.5 到 /var/log/tomcat5.5/myApp.log。

如果我打開到 foo 的 ssh 連接(注意:Internet 連結、高延遲、相對較慢的上傳)並執行tail -F /var/log/apache/access.log,我無法達到核心阻止 httpd 寫入此日誌文件並因此減慢 httpd 性能的情況,因為等待在每個執行緒上強制執行?

為了給出一些數字,我們假設 foo 每秒記錄約 200kb 的日誌數據,這些數據需要通過網路推送到 ssh 客戶端。

另一個理論方面:如果 /var/log 文件系統設置在無限大小的記憶體上(請記住:理論上講)以消除硬碟尋軌時間,會發生什麼?

第三方面,如果我從一個非常慢的連結打開 ssh 連接會發生什麼(假設 foo 的流量被塑造成只推送 5kb/s 上傳)?

很想听聽你們的想法。

感謝閱讀,馬克西姆。

我認為這裡不會出現 I/O 阻塞。當您執行“tail -f”時,發生的事情是

  1. 你的shell程序,比如說bash,將產生一個新的程序’tail’。
  2. tail 將打開文件,將文件指針移動到末尾,等待 3 秒,檢查是否有新數據。
  3. 如果有新數據,tail 將使用 unix 管道將其推回 bash。
  4. 這些數據通過 bash + ssh 從伺服器傳輸到您的機器。

如您所見,緩慢的 Internet 連接不會影響第 2 步,這無論如何都是 I/O 性能的關鍵。

另外,tail 以“只讀”模式打開文件,並且有根據的猜測,日誌以“僅附加”模式打開,因此這裡不應該擔心太多鎖定。如果這對您來說仍然有點擔心,那麼您可能想嘗試基於最新 linux inotify api的inotail以避免輪詢文件。

希望這會有所幫助,亞歷克斯

引用自:https://serverfault.com/questions/161981