我的服务器正在向客户端提供文件,需要高速发送输出。目前,我位于法国的专用服务器承诺 1Gbps 端口,SLA 为 100Mbps,这意味着我的服务器最大输出为 12MB/s
然而,使用 Capsa 和带宽 freemeter 我发现我的服务器所有客户端的输出速度总计仅为 3MB/s,也就是 24 Mbps,甚至还达不到我所承诺的一半。
我在想是不是因为我的源代码是用 ASP.NET MVC 编写的?代码使用 3MB 缓冲区大小并允许部分下载,当我使用下载管理器并使用 3 个部分时,它仍然只提供大约 80KB/s
如何优化 Windows 2008 服务器以最大化网络能力并发送大量输出?我的服务器是 Intel Xeon,处理能力非常低,RAM 为 8GB。
答案1
这意味着我的服务器最大输出为 12MB/s
啊。不。更像是 10MB/S。有一些协议开销 - 数据并不是在没有任何校验和的情况下传输的。
也就是 24 Mbps,甚至还不到我所承诺的一半。
好的,那么您在这里做什么?说真的,这不是技术问题。向您的托管商提出这个问题,向他们展示您的 SLA,触发其中嵌入的处罚。
我在想是不是因为我的源代码是用 ASP.NET MVC 编写的?如何优化 Windows 2008 服务器以最大化网络功率并发送大量输出?
好的,换个角度。你在这里做什么?糟糕的编程几乎不是服务器管理员的问题。修复你的代码。
首先要弄清楚它有多糟糕。将 STATIC 文件放入服务器。使用它进行速度测试。然后你就有了基准——这就是你的服务器能够提供的。任何低于基准的都是你的问题。
该代码使用 3MB 缓冲区大小并允许部分下载,当我使用下载管理器并使用 3 个部分时,它仍然只会提供大约 80KB/s
现在开始认真起来——80kb 是一个可笑的数字,有些事情非常不对劲。如果您在传输过程中使用异步加载来加载下一个切片,那么 3mb 缓冲区是可以的——这不是完全初级编程,也不是真的很复杂(即在发送第一个 3mb 时加载下一个 3mb)。.NET 4.5 有一个很好的异步关键字,旧版本请使用任务。
哦,想想运行过时的服务器操作系统是多么好 - 23008 是旧的。2008 R2 是“旧的”,但 2012 是最新的。
正如我所说 - 验证它是您的代码,然后修复它。在您的实验室中放置一个复制案例,运行分析器,找出它挂起的位置。可能是完全糟糕的磁盘子系统 - 但是,80kb/s 真的很小。
不管是什么,它都不是 serverfault.com 案例 - 不在分析范围内。要么你写的代码很糟糕(stackoverflow.com),要么这是 SLA 问题(合法,由提供商支持处理)。使用静态文件测试用例将其解决 - 那么你的代码就不会受到影响。