Sri Lanka captain Dhananjaya de Silva won the toss and opted to bat under cloudy skies but that decision quickly backfired as his side were three down for six runs after seven overs.
With a hard pitch offering assistance for England's seam attack, Sri Lanka's openers were stifled early on and Dimuth Karunaratne was out as he swished at a rising delivery from Gus Atkinson and nicked a top edge to wicketkeeper Jamie Smith.
Chris Woakes struck twice in the next over, tempting Nishan Madushka into an attempted drive which he nicked to Joe Root at first slip.
Woakes removed Angelo Mathews for a five-ball duck as the experienced Sri Lankan offered no stroke to a ball angled in and was given out lbw - his review proving futile.
Kusal Mendis and Dinesh Chandimal steadied the ship for Sri Lanka to push the score along to 40 before Mendis, who made 24, was undone by a ferocious 93mph rising ball from Mark Wood that rapped him on the thumb before flying through to Harry Brook at slip.
Skipper De Silva played positively to reach 28 at lunch but Sri Lanka were five down by then as Chandimal was out lbw to right-arm spinner Shoaib Bashir - the ball pitching outside off stump and shooting low into the batsman's ankle.
Ollie Pope is captaining England after Ben Stokes was ruled out for the rest of the English summer by a hamstring injury.
Before play started there was a tribute to former England batsman and coach Graham Thorpe who died, aged 55, this month.