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 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 yesterday means they are fourth, ahead of their of their north London rivals on goal difference having played a game more.
Palace, who continue to improve under former Arsenal captain Patrick Vieira, move up to ninth.