Edin Dzeko settled any nerves by breaking the deadlock after 64 minutes and followed up with his fifth crucial goal in the last three games.
Stevan Jovetic and Yaya Toure - netting City's 100th league goal of the season with a quite brilliant solo effort - added further strikes in the dying moments to send City two points clear at the top, with just one game to play, in some style.
With a superior goal difference to Liverpool, City effectively needs only a draw from its final game against West Ham United this weekend to claim its second title in three seasons.
After Liverpool's capitulation to Crystal Palace earlier in the week, City had been expected to cruise home.
That it found the going tough on a night of heavy showers was credit to Villa side which, safe from relegation, supposedly had little to play for.
Dzeko's heroics, in the absence of top scorer Sergio Aguero, further underlined his return to form and confidence this season after recent goals against Crystal Palace and Everton in the run-in.
Title nerves and anxiety in the crowd became increasingly obvious throughout a goalless first half.
City completely dominated possession but Villa, defending deep and with five across the back, repelled wave after wave of attacks.
Goalkeeper Brad Guzan was well protected after dealing with a couple of early shots.
Guzan was first tested when Aleksandar Kolarov fired at him from a tight angle on the left.
He looked beaten after James Milner picked out Pablo Zabaleta with a clever reverse pass and Zabaleta set up Toure, but the keeper saved with his feet.
City continued to create chances but struggled to find the target.
Kolarov fizzed in a low cross from the left but neither David Silva nor Dzeko could get a firm touch. Samir Nasri curled a long-range effort over.
Villa finally pieced together a decent attacking move after half-an-hour but 22-year-old striker Jordan Bowery, handed a chance after injury to Gabriel Agbonlahor, could not turn in Andreas Weimann's deep cross.
Weimann scented an opportunity himself as Villa broke after a City corner but he lacked the conviction to beat Zabaleta and his long-range shot was deflected wide.
City fans began to get anxious but their side finished the first period back in control as Zabaleta crossed into the danger area for Silva but Villa scrambled clear.
Milner then whipped in a fine ball for Nasri from the right but the former Arsenal man volleyed wide.
The host looked to step up the tempo after the break but Dzeko failed to control a long Toure ball and Villa, well led by captain Ron Vlaar, hacked clear from numerous other attacks.
Silva headed back into the area after Villa only half-cleared a corner but Vincent Kompany's opportunistic overhead kick was aimed straight at Guzan.
Guzan dived to his left to punch away a well-struck Kolarov free-kick from 25 yards.
City finally picked its way through as the rain pelted down again as Silva fed Zabaleta down the right and his low ball was gratefully tucked in by Dzeko six yards out.
Once Villa was breached, it could not prevent further damage.
Zabaleta got inside the fullback again to pull the ball back and although Nasri's initial shot was blocked by Guzan, Dzeko had a simple job to tap in his second.
With the tension finally lifted and the crowd at last in full voice, Toure went close to a third with a free-kick deflected narrowly wide.
Villa might have set up a tight finale when Weimann's header six minutes from time crashed against the crossbar and bounced away off the line.
Instead substitute Jovetic made the win comfortable by finishing from the edge of the box and Toure broke from his own half to add a fine fourth.
Share

