We're running our 10.3.1 ArcServer installation on two Hyper-V's that are clustered at the ArcServer level. We've pushed all of our imagery services to its own VM with 16gb of RAM and 2 virtual CPUs running at 2.5ghz each. Our RAM utilization is fine at around 40-45%, but our CPU utilization goes through the roof from time to time. I have one imagery service that takes between 45-55% of the CPU from time to time. The total CPU utilization will be around 95-98%. The only thing this VM is doing is running these services. Users are complaining that service is slow. I'm assuming (perhaps erroneously) that the speed users are experiencing is related to the high CPU usage.
I've googled around and all I can find is information to ArcServer 9.3 or 10.0. Can anyone give me any idea of what I might be able to do to fix this problem? Do I throw more virtual CPUs at it?
How many services are you pushing? How many instances of each service? What OS? Are you using a web adapter? Https? IWA or GIS Token? Image Service cached? There are about 2 dozen architecture factors that seriously impact performance, but, all that aside, with just two "cores", I'm surprised you can even get ArcGIS Server to start. On a VM, I had to push it to 16 cores to see any stability. What type if hard drive? Is it a shared VHD where dozens of other Vm's are using the same HDD? You should choose clustering only as a last resort, and I really emphasize "last resort" (e.g ESRI tech support told you there is no other way your site is going to work unless in a cluster). Clustering means you have a shared config store, so every other round-robin request for your image service has to go over the network via SMB to the config store. Get rid of the cluster, and add the RAM/CPU resources to the single instance. Or....run two sites, one on each VM, one for vector data, and a dedicated one for image. But by all means, avoid clustering.