设置:
Windows Server 2008 R2,托管在 HyperV 虚拟机上,分配了 3GB 内存。
我已经在此虚拟 Web 服务器上使用ImDisk设置了一个 RAMDisk(容量 512MB 足以满足我们的要求)并为其分配了 3GB RAM(托管应用程序在重负载下不需要超过 ~768MB)。
最初 WebRoot 目录位于网络共享上,性能足够,但在重负载下注意到这导致网络共享服务器的 LAN 流量显着增加(我相信它正在访问网络共享以向我的用户提供网页- 这应该发生吗?)。
由于 VM 托管在故障转移群集中,因此 VM 的 C:\ 驱动器存储在 iSCSI SAN 上,因此将 WebRoot 文件夹保留在 C:\ 驱动器上没有性能优势(对此进行了测试)。
所以我选择将内容放到 RAMDisk 上,这当然在访问时间方面表现出了很好的改进。源内容仍将存储在网络共享中,但会每 24 小时同步到 RAM 磁盘中。
任何人都有充分的理由相信这会:
A) 不值得?
或者更重要的是,
B)是一个彻头彻尾的坏主意!?
批评赞赏,无论是积极的还是消极的!
IIS 不会缓存来自网络共享的内容,这就是您性能不佳的原因。但是,当文件存储在本地磁盘上时,它应该缓存文件。您的服务器是虚拟的并且主机的磁盘存储在 iSCSI 磁盘上这一事实不应影响 IIS 缓存文件的能力。
我无法想象 ramdisk 会为您提供超过 IIS 的本机磁盘缓存的性能优势,除非在第一次请求后出现任何极端情况。
我会反对使用 ram 磁盘,除非你有一个边缘情况,你需要缓存的内容类型不适合 IIS 的缓存。我喜欢 KISS 规则。;-)
在 VM 中使用 RAM 磁盘与在物理机中使用 RAM 磁盘几乎是一样的。
Windows(以及几乎所有其他操作系统)将使用任何额外的可用 RAM 进行文件缓存。它会尽可能长时间地保留您最近使用的文件,平衡内存需求和文件访问时间。
当您使用 RAM 磁盘时,您实际上是在说您先验地知道哪些文件需要非常快地可用,并且它们不会是最近使用过的文件。如果它们实际上是最近使用的文件,那么通过使用 RAM 磁盘,您将失去更灵活地使用内存的机会,可能会提高其他方面的性能。
从 VM 中的实际存储(而不是 RAM 磁盘)读取文件所需的时间可能比在没有虚拟化的同一台机器中读取文件所需的时间要长一些。所以你需要问自己这个问题:
如果是第一个,那么文件读取延迟可能无关紧要。如果是第二种,VM 中的文件读取延迟会更大,因此 RAM 磁盘可能更有意义。
此外,您还需要问自己另一个问题:
如果您正在共享主机,那么您需要考虑您为 RAM 磁盘提供给 IIS VM 的 RAM 是否可以被其他 VM 更好地使用。如果您在 VM 中打开了动态内存,那么它将被随机分配到当前需要它的 VM 中。如果允许在当前实际需要的地方使用 RAM,而不是先验地决定应该使用它来降低 IIS 的文件访问延迟,那么您可能会完成更多的工作。