Addax driver Cecotto maintained his pole position at the start, but could never get more than two seconds ahead of Ericsson (iSport), who got particularly close around the pitstops and into the closing laps.
Although Ericsson took a few looks at passing as they diced through the traffic, Cecotto had things under control and held on to claim victory by half a second.
Giedo van der Garde had a lonely run to third for Caterham. The Dutchman looked like he would have to start at the back as he struggled to get off the dummy grid, but he managed to pull away before the final car passed so could reclaim his position.
Championship leader Davide Valsecchi (DAMS) left his pitstop later than most and was able to come through to fourth place from seventh on the grid.
Front row starter Max Chilton was passed by Ericsson and van der Garde into the first corner, then lost out to Valsecchi in the pits, but the Carlin driver was able to get away from iSport's Jolyon Palmer and secure fifth, as Palmer took his best GP2 result yet in sixth.
An early pitstop and quick laps thereafter allowed Lotus' James Calado to turn 13th on the grid into a seventh-place finish. Calado's team-mate Esteban Gutierrez looked set to claim reverse-grid pole in eighth until he damaged his car on the chicane barriers after launching over the kerbs amid confusion in traffic. Arden's title contender Luiz Razia also had to pit for repairs following the incident.
Trident's Stephane Richelmi was elevated to eighth following the incident so will start from pole on Saturday.
Nathanael Berthon (Racing Engineering) and Coloni driver Stefano Coletti - who left his mandatory pitstop until four laps from the finish but then lost a few seconds due to being released too soon - completed the top 10.
1. Johnny Cecotto Barwa Addax Team
2. Marcus Ericsson iSport International
3. Giedo van der Garde Caterham Racing
4. Davide Valsecchi DAMS
5. Max Chilton Carlin
6. Jolyon Palmer iSport International
7. James Calado Lotus GP
8. Stéphane Richelmi Trident Racing
9. Nathanaël Berthon Racing Engineering
10. Stefano Coletti Scuderia Coloni
11. Tom Dillmann Rapax
12. Simon Trummer Arden International
13. Rodolfo Gonzalez Caterham Racing
14. Rio Haryanto Carlin
15. Luiz Razia Arden International
16. Victor Guerin Ocean Racing Technology
17. Felipe Nasr DAMS
18. Fabrizio Crestani Venezuela GP Lazarus
19. Ricardo Teixeira Rapax
20. Julian Leal Trident Racing
21. Giancarlo Serenelli Venezuela GP Lazarus
22. Esteban Gutiérrez Lotus GP
Nigel Melker Ocean Racing Technology
Fabio Onidi Scuderia Coloni
Josef Kral Barwa Addax Team