对于前者假设以下设置:
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上传)?
很想听听你的想法.
谢谢阅读,
格言.
解决方法
>你的shell进程,比方说bash,会产生一个新进程’tail’.
> tail将打开文件,将文件指针移动到结尾,等待3秒并检查是否有新数据.
>如果有新数据,tail会使用unix管道将其推回bash.
>这些数据通过bash ssh从服务器传输到您的机器.
正如您所看到的,慢速互联网连接不会影响步骤#2,这无论如何都是I / O性能的关键.
另外,tail以“只读”模式打开文件,并且有根据的猜测,日志以“仅附加”模式打开,因此不必担心这里有太多锁定.如果这仍然是你的一个问题,那么你可能想尝试基于最新的linux inotify api的inotail,以避免轮询文件.
希望这可以帮助,亚历克斯