Skip to main content
This guide explains how to diagnose and remediate network performance issues in Azure. It covers recommended tools, how to run end-to-end tests with the Azure Connectivity Toolkit (AzCTK), how to interpret results, and practical checks to narrow down root causes. Use these Azure-native and community tools for monitoring and diagnosing connectivity, throughput, and latency issues: AzCTK is particularly useful for automated, repeatable tests of TCP connectivity, packet loss, latency, and multi-session bandwidth.

AzCTK overview and common cmdlets

AzCTK provides cmdlets that replicate real-world TCP behavior across different session counts and window sizes. Useful cmdlets include: Key AzCTK features:
  • End-to-end packet loss and latency tests.
  • Single-thread and multi-thread bandwidth tests (multiple concurrent sessions).
  • Ability to vary TCP window sizes to emulate different client behaviors.
  • Installable as a PowerShell module for automation and scripting.
The image describes AzCTK features, including end-to-end packet loss and latency tests, simulating single/multi-thread bandwidth tests, and an installable PowerShell module for ease of use.
The screenshot above shows a sample multi-stage test output with bandwidth, packet loss, and latency reported for different session counts and stages. Reviewing these metrics across stages helps identify capacity constraints, device misconfigurations, or endpoint limitations.

Example: running a Get-LinkPerformance test

Run a basic multi-stage performance test:
This triggers a series of TCP tests (no-load ping, single-session, multi-session, varying window sizes) over the specified duration. Example (trimmed) output:

Interpreting the core metrics

Troubleshooting checklist

When results show elevated loss, reduced bandwidth, or increased latency, validate configuration and capacity across all layers:
  • Azure networking:
    • NSGs and UDRs for unintended rules.
    • Load Balancer configuration and health probes.
    • VM size and NIC capabilities (maximum bandwidth, Accelerated Networking).
  • On-premises network:
    • Routers, switches, firewalls for queueing or drops.
    • MTU settings and VLAN configurations.
  • Connectivity circuits:
    • ExpressRoute or VPN circuit health and advertised BGP routes.
  • Endpoints:
    • Server NIC drivers, OS TCP stack tuning, CPU/memory saturation.
Run tests from both endpoints (on-premises → Azure and Azure → on-premises). Vary session counts and TCP window sizes to isolate whether the bottleneck is in the network or on the endpoints.

Installation and quick start

Install AzCTK from the PowerShell Gallery and import it into your session:
Run PowerShell as an administrator if you need to install modules system-wide. Ensure you have a supported PowerShell version (PowerShell 5.1 or PowerShell Core) and an execution policy that permits module installation.

Example troubleshooting workflow

  1. Baseline test: run Get-LinkPerformance with default stages to capture baseline bandwidth/latency/loss.
  2. Reproduce: run the same tests from the opposite endpoint to confirm symmetry.
  3. Isolate: increase session counts and vary window sizes to determine whether the limitation changes (network vs. endpoint).
  4. Inspect: review NSGs, UDRs, load balancers, VM SKUs, and NIC settings. Check on-premises devices and circuit state.
  5. Remediate: adjust configuration (e.g., increase VM size, tune TCP, resolve MTU mismatches), then retest.
Using AzCTK within a structured troubleshooting process helps pinpoint whether network performance issues are caused by capacity limits, misconfiguration, or endpoint constraints — enabling targeted, effective remediation.

Watch Video