I am running Server2016 in two VM's with IIS installed, using NLB to balance the traffic and shared config/ssl. My upload speeds seem limited to 256KB/s (2Mb). My internet connection is gigabit fiber.
I ran a few tests to try to isolate the issue. I created a simple .net web app with an upload and a submit button, and uploaded a 28MB file.
When I put the app on my IIS box at https://domain.tld/upload, it took 1.9 minutes according to chrome dev tools , which is roughly 256KB again.
I used visual studio to make it, so I just ran the app on my desktop win 10 machine via IIS express and opened up the random port through my router, and the upload took 761ms, which is roughly ~37MB/s
I repeated those tests a few times and got pretty much the same results. Given that I'm uploading and downloading from the same box, it's really using ~74MB/s-ish, or 30% of my theoretical gigabit upload and download each. So I feel like it's not an ISP issue.
I also tried breaking the NLB cluster and routing all traffic to just one box, same result.
Any ideas on why IIS is so slow?
Posting this in case anyone else is every curious.... the problem was NLB.
For outbound traffic it's no big deal, but you need to do some network tweaks to make it work "properly".
Upon further testing, when uploading a large file to our IIS cluster, we would see terrible network performance on other machines/VMs on the same switch, so this would seem to confirm the flooding problem.
In my particular situation, in my work environment, the network peeps said "nope" to any network infrastructure changes, including enabling IGMP.
We just wanted two servers for high availability, so we decided to instead create a two node failover cluster with a shared disk for a witness and a shared disk for IIS shared config and centralized SSL. It's not active-active, but we can maintain uptime while patching, etc. I know it's not recommended for IIS to do a cluster, but in the absence of a hardware load balancer or a network you can configure properly, this will have to do :)
External links referenced by this document: