Arsenal were put to the sword in the first half by the clinical hosts, with goals from forwards Jean-Philippe Mateta and Jordan Ayew giving Palace a deserved 2-0 interval lead.
The north Londoners improved after the break, with Emile Smith Rowe and Martin Odegaard missing big chances to get their team back in the match.
Their wastefulness proved costly as Wilfried Zaha put the game to bed with a penalty 16 minutes from time.
Tottenham Hotspur’s 5-0 home victory over Newcastle United on Sunday means they are fourth, ahead of their arch-rivals on goal difference having played a game more.
The scoreline at Selhurst Park did not flatter an impressive Palace, who continue to improve under former Arsenal captain Patrick Vieira, with the victory moving them up to ninth.
Their 1-0 win at Aston Villa last time out was their fifth away league victory in a row - the first time they had been on such a run since May 2015.
But they struggled from the start to find any rhythm, with Palace very much the better side in the opening period.
It took the home side 16 minutes to break the deadlock, as Joachim Andersen’s head sent a free-kick across the box for Mateta to steer in his fourth league goal of the season.