我试图在 MSSQL 服务器和客户端在两台不同的机器上运行的已部署应用程序上重现一些问题。我认为两台机器之间可能存在网络问题,所以我想尝试在两台 Hyper-V 虚拟机(在同一虚拟服务器上)上重现这些情况。当然,这些虚拟机的网络是“本地”的,因此它实际上与实际环境中的条件相去甚远。
是否有可以在任一虚拟机上运行的程序会降低网络性能?或者也许还有其他解决方法?例如,重现条件的一种方法可能是在地理位置分散的不同 Hyper-V 服务器上运行 VM(因此 SQL 流量通过 VPN 或其他方式)——但我认为这有点冗长。必须有更简单的方法。
在 Linux 上你会使用 netem,在 FreeBSD 上你会使用 dummynet。
这些解决方案都不能在使用 Hyper-V 的单个 Windows 机器上运行。我进行了搜索,但找不到任何与 Windows Hyper-V 兼容的网络模拟器。
您可以将两个虚拟机放在两台不同的物理机器上,它们之间有一个 Linux 或 FreeBSD 机器。但看起来没有任何解决方案可以在单个 VM 主机上完全满足您的需求。
我的朋友在 ESX 中使用 dummynet 和 FreeBSD 进行了设置。我知道它不是 Hyper-V,但您可以对其进行修改以适合您。 http://apocryph.org/2009/05/15/simulating-slow-wan-links-with-dummynet-and-vmware-esx/
Dummynet 应该适合你:http: //info.iet.unipi.it/~luigi/dummynet/
它在 NIC 上安装服务,然后通过命令行设置参数。
我用它来测试在 Windows XP 上通过高延迟或低带宽链接的网站访问,它工作得很好。
另一种方法是独立的网络仿真器工具包 (NEWT),尽管它已经很老了,但它的功能非常强大,并且适用于 x86 和 x64 Windows 操作系统。
https://blog.mrpol.nl/2010/01/14/network-emulator-toolkit/
使用包含的 XML 模板和安装程序,您可以快速启动并运行模拟延迟、带宽、抖动和其他网络变量。
我已经在从 XP -> Windows 10 的所有 Windows 版本上测试并使用了这个应用程序。
听起来你需要netem
您可以插入丢包、延迟、抖动等
如果只是为了延迟数据包,在 Linux 上你可以简单地使用tc和菊花链队列规则(例如HTB):
损失也可以通过iptables 和
random
模块引入: