在 IIS 日志文件夹和文件上使用 NTFS 压缩是一种好的做法吗?
通过这样做,我能够将 IIS 日志从 20GB 减少到 7GB。IIS 日志按天计算,平均大小为 20MB,但某些极端日子甚至达到 200MB。
我想知道 IIS 是否必须在内存中打开整个文件,从而强制 NTFS 每次解压 20MB(极端情况下为 200MB)?或者是否有某种魔法允许 IIS 附加内容?这对系统有何影响?如果我们增加流量,这会成为问题吗?
我应该按小时而不是按天来划分吗?
微软有关于此事的官方论文吗?我找不到。
答案1
由于 Evan 已经给出了一般性答案,我想回答你的两个子问题:
IIS 每隔 X 分钟刷新一次日志吗?
http.sys,IIS 的内核模式部分负责记录日志,它会在将数据写入日志文件之前将其缓冲在内存中。我不确定,但我认为它不会每隔 x 秒刷新一次,更有可能是在其缓冲区已满后刷新。
添加一行时是否需要读取整个文件?
不会,NTFS 将文件更新写入其自己的缓存,然后压缩数据并将其异步附加到文件。写入压缩文件的速度并不比写入未压缩文件慢很多。
因此,对 IIS 日志文件使用 NTFS 压缩应该没有问题。
资料来源:
IIS 7 资源工具包,第 15 章:日志记录 - Microsoft Press 2008
Windows Internals 第 6 版第 2 部分,第 12 章:文件系统 Microsoft Press 2012
答案2
我在许多 IIS 服务器上压缩 IIS 日志,尽管主要是托管 Outlook Web Access/App 或低容量网站的服务器。我这样做没有任何问题,而且非常喜欢节省磁盘空间。
一般来说,通过做出这个决定,您是在用 CPU 换取存储空间。如果您一开始就受 CPU 限制,那么这可能不是一个好的权衡。对于我的 OWA 服务器,它每天可以产生数 GB 的日志(感谢 ActiveSync 设备),我认为这种权衡是好的。
NTFS 文件系统驱动程序处理压缩,因此它不会改变 IIS 写入文件的方式。
编辑:
您可能还需要牺牲一些 I/O 带宽和 IOPS。如果您的日志写入量足够大,以至于日志写入会消耗大量 I/O 资源,那么启用压缩也会降低 I/O 消耗。
唯一能知道这会对你造成什么影响的方法就是自己进行基准测试。先禁用压缩,然后启用压缩,然后比较两者。没有什么魔法棒可以让你知道它会对你造成什么影响——有太多不确定的因素在起作用。