What it is
A virtual machine in the Stopped power state rather than Stopped (deallocated). It isn't doing any work, but Azure still reserves its compute capacity, so you keep paying the full compute rate on top of its disks and any reserved public IPs.
Why it happens
Azure has two very different "off" states. Stopped (deallocated) releases the underlying compute host and stops the compute meter. Plain Stopped keeps the host reserved for the VM, so compute keeps billing.
You land in the expensive one by shutting the machine down the intuitive way: shutdown from inside the guest OS, or clicking Stop in a tool that halts the OS without deallocating. The portal's own Stop button does deallocate, but a guest-initiated shutdown does not, and the two look identical in most dashboards. The VM reports "Stopped" either way, so nothing signals that the meter is still running.
What it costs / blast radius
A Stopped (not deallocated) VM bills its full hourly compute rate, exactly as if it were running, plus its attached disks and any reserved public IPs. (List price; your SKU and contract may differ.) At list price that ranges from a few dollars a month for a small B-series VM to well over a thousand for a large GPU or memory-optimized SKU. The disks bill their provisioned size regardless, and a VM parked "off" for a quarter can quietly out-cost one that was actually deallocated the day it stopped.
See it
# Show the real power state (portal "Stopped" hides the distinction)
az vm get-instance-view --name vm-prod-01 --resource-group rg-prod \
--query "instanceView.statuses[?starts_with(code,'PowerState')].code" -o tsv
# PowerState/stopped <-- still billing compute
# (you want PowerState/deallocated)# Deallocate — frees the host, stops the compute charge (disks still bill)
az vm deallocate --name vm-prod-01 --resource-group rg-prod
# Confirm it landed in the free state
az vm get-instance-view --name vm-prod-01 --resource-group rg-prod \
--query "instanceView.statuses[?starts_with(code,'PowerState')].code" -o tsv
# PowerState/deallocatedHow StratoLens helps
StratoLens checks the true power state of every VM across every subscription and flags the ones sitting Stopped instead of Deallocated, with the compute cost they're still accruing. You don't have to audit power states by hand or trust that "Stopped" means what it looks like; the check runs continuously inside your own tenant.