Arsenal's hopes of a top-four finish were dented after Christian Benteke's first goal in a year helped Crystal Palace to an excellent win which confirmed their Premier League place.
Benteke was left unmarked to head Luka Milivojevic's delivery past Bernd Leno before Mesut Ozil equalised with a clever finish shortly after half-time.
However, two goals in eight minutes ended Arsenal's 10-match winning league run at Emirates Stadium.
Wilfried Zaha capitalised on a mistake by Shkodran Mustafi to restore Palace's lead and James McArthur's header made it 3-1 before Pierre-Emerick Aubameyang's reduced the deficit with his 19th league goal of the season.
Read also: EPL: Everton crucify Man United 'Red Devils' on resurrection day