tail 会降低 Linux (ext3) 上的日志写入速度吗?

Max*_*ler 5 performance ssh logging performance-tuning network-traffic

我想知道 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 文件系统设置在无限大小的 ram 上(记住:理论上)会发生什么,从而消除硬盘寻道时间?

第三方面,如果我从一个非常慢的链接打开 ssh 连接会发生什么(假设 foo 的流量形状为仅推送 5kb/s 上传)?

很想听听你们的想法。

感谢阅读,马克西姆。

小智 3

我认为这里不会出现 I/O 阻塞。当你执行“tail -f”时,发生的事情是

  1. 你的 shell 进程,比如说 bash,将产生一个新进程“tail”。
  2. tail 将打开文件,将文件指针移至末尾,等待 3 秒并检查是否有新数据。
  3. 如果有新数据,tail 会使用 unix 管道将其推送回 bash。
  4. 该数据通过 bash + ssh 从服务器传输到您的计算机。

正如您所看到的,缓慢的互联网连接不会影响步骤 #2,无论如何,这都是 I/O 性能的关键。

另外,tail 以“只读”模式打开文件,并且有根据的猜测,日志以“仅附加”模式打开,因此这里不应该有太多锁定需要担心。如果这对你来说仍然有点担心,那么你可能想尝试一下基于最新的 linux inotify api 的inotail以避免轮询文件。

希望这有帮助,亚历克斯