Kohli’s unbeaten 166 from 110 balls, the mainstay of India’s huge 50-over total of 390 for five, set up a record 317-run victory and 3-0 series whitewash.
Sri Lanka were dismissed for 73 in reply, with their innings lasting only 22 overs.
Kohli moved to within three centuries of equalling Sachin Tendulkar’s record of 49 ODI hundreds with a blistering effort on a slow surface.
The former India captain now has 46 hundreds in the format and 10 against Sri Lanka – the most of any batter against a single opposition.
Shubman Gill compiled his second ODI century – 116 off 97 balls – in a second-wicket partnership of 131 with Kohli.
Skipper Rohit Sharma made 42 at the top of the order and Shreyas Iyer hit 38 from 32 balls as India scored 116 from the last 10 overs.
Sri Lanka’s innings soon disintegrated as Mohammed Siraj reduced them to 39 for six in the 12th over.
Fast bowler Siraj finished with ODI-best figures of four for 32 from his 10 overs.
Kuldeep Yadav (two for 16) and Mohammed Shami (two for 20) also chipped in as Sri Lanka’s despair grew.
Just three Sri Lankan batters reached double figures as opener Nuwanidu Fernando top scored with 19.
The previous biggest ODI win by runs was New Zealand’s 290-run victory over Ireland in Aberdeen in 2008.