A penalty from captain Martin Odegaard gave 10-man Arsenal a battling Premier League victory at Crystal Palace.
Eddie Nketiah was brought down by Sam Johnstone after Gabriel Martinelli's quickly taken free-kick, with Odegaard sending the goalkeeper the wrong way from the spot.
At that stage Mikel Arteta's side looked comfortable, but they were left hanging on after left-back Takehiro Tomiyasu was shown a red card for two bookings.
The first yellow was for taking too long over a throw-in and the second was harshly awarded for a minor foul on Jordan Ayew in midfield.
Palace put on late pressure, with Tyrick Mitchell drilling over in injury time, but the Gunners, who hit the post through Nketiah in the first half, deserved their victory.
Arsenal join Brighton and Manchester City on six points from two games, while Palace failed to build on their opening-day win at Sheffield United.
Tomiyasu the talking point
Arsenal have a bit of a problem at full-back. Summer signing Jurrien Timber suffered a knee injury last week that could keep him out for most of the season and Oleksandr Zinchenko has just returned from a calf injury and started on the bench.
Tomiyasu, who is a right-back by trade, started on the left and Thomas Partey, a midfielder, played at right-back when Palace had the ball, moving into his usual position when his side had possession.
Japan international Tomiyasu will miss the next game now after his controversial red card. He was shown a yellow card for taking too long over a throw-in - although it was Kai Havertz who had wasted most of the time before leaving the ball for his team-mate.
And then he was dismissed for a nothing foul on Ayew about 50 yards away from any dangerous area.
That was Arsenal's first Premier League red card since 2021-22.
The Gunners were the better team for most of the game, and almost led when Nketiah poked a shot off the post and then chipped an effort onto the roof of the net.
Roy Hodgson's Palace defended stoutly for 99% of the game but their one blip effectively cost them the game.
They were taking their time to organise their defensive shape from an Arsenal free-kick when Martinelli caught them out with a ball to Nketiah, who was felled by Johnstone. Odegaard, whose last penalty was for Vitesse in 2019, made no mistake from the spot.
Declan Rice had another solid game in the centre of midfield following his £100m move from West Ham, but Havertz is still trying to find his proper role in the team.
Six of Palace's 14 chances came in the final five minutes with Odsonne Edouard having an effort saved and Mitchell lashing over after Aaron Ramsdale parried the ball.
Player of the match
ØdegaardMartin Ødegaard
Crystal Palace
Squad number10Player nameEze
Squad number6Player nameGuéhi
Squad number2Player nameWard
Squad number16Player nameAndersen
Squad number1Player nameJohnstone
Squad number8Player nameLerma
Squad number3Player nameMitchell
Squad number22Player nameÉdouard
Squad number9Player nameJ Ayew
Squad number28Player nameDoucouré
Squad number15Player nameSchlupp
Squad number49Player nameRak-Sakyi
Squad number29Player nameAhamada
Line-ups
Crystal Palace
Formation 4-2-3-1
1Johnstone
2Ward16Andersen6Guéhi3Mitchell
8Lerma28Doucouré
9J Ayew10Eze15Schlupp
22Édouard
1Johnstone2WardSubstituted forRak-Sakyiat 83'minutes16Andersen6Guéhi3Mitchell8Lerma28DoucouréBooked at 90mins9J AyewBooked at 27mins10Eze15SchluppSubstituted forAhamadaat 74'minutes22ÉdouardSubstitutes
5Tomkins17Clyne26Richards29Ahamada31Matthews37Gordon44Riedewald49Rak-SakyiArsenal
Formation 4-3-3
1Ramsdale
5Partey4White2Saliba18Tomiyasu
8Ødegaard41Rice29Havertz
7Saka14Nketiah11Martinelli
1Ramsdale5Partey4White2Saliba18TomiyasuBooked at 67mins8ØdegaardSubstituted forZinchenkoat 89'minutes41Rice29HavertzBooked at 90mins7SakaSubstituted forKiwiorat 89'minutes14NketiahSubstituted forJorginhoat 79'minutes11MartinelliSubstituted forGabrielat 70'minutesSubstitutes
6Gabriel10Smith Rowe15Kiwior19Trossard20Jorginho21Fábio Vieira22Raya24Nelson35ZinchenkoReferee:David CooteAttendance:24,189Live Text
Match ends, Crystal Palace 0, Arsenal 1.
Second Half ends, Crystal Palace 0, Arsenal 1.
Attempt missed. Tyrick Mitchell (Crystal Palace) left footed shot from the left side of the box is too high.
Attempt saved. Odsonne Édouard (Crystal Palace) right footed shot from the left side of the six yard box is saved in the bottom left corner. Assisted by Jefferson Lerma with a headed pass.
Attempt blocked. Cheick Doucouré (Crystal Palace) header from the centre of the box is blocked. Assisted by Jesurun Rak-Sakyi with a headed pass.
Kai Havertz (Arsenal) is shown the yellow card.
Foul by Kai Havertz (Arsenal).
Joachim Andersen (Crystal Palace) wins a free kick in the defensive half.
Offside, Arsenal. Jorginho tries a through ball, but Oleksandr Zinchenko is caught offside.
Cheick Doucouré (Crystal Palace) is shown the yellow card for a bad foul.
Kai Havertz (Arsenal) wins a free kick on the left wing.
Foul by Cheick Doucouré (Crystal Palace).
Substitution, Arsenal. Oleksandr Zinchenko replaces Martin Ødegaard.
Substitution, Arsenal. Jakub Kiwior replaces Bukayo Saka.
Bukayo Saka (Arsenal) wins a free kick in the defensive half.
Foul by Naouirou Ahamada (Crystal Palace).
Attempt blocked. Jordan Ayew (Crystal Palace) left footed shot from a difficult angle on the left is blocked. Assisted by Tyrick Mitchell.
Attempt blocked. Jesurun Rak-Sakyi (Crystal Palace) left footed shot from the right side of the box is blocked. Assisted by Jordan Ayew.
Attempt missed. Odsonne Édouard (Crystal Palace) header from the centre of the box misses to the right. Assisted by Tyrick Mitchell with a cross.
Corner, Crystal Palace. Conceded by Thomas Partey.