The start of the Belgrade derby between Red Star and Partizan was delayed for 45 minutes because of crowd trouble.
Red Star fans threw seats and flares at riot police, who had to retreat. Extra police officers came to help empty one area of the north tier.
When the game finally got under way, both sets of fans lit flares and threw stun grenades onto the athletics track around the pitch.
The game, which was held up for several minutes in the second half to allow smoke to clear, ended 0-0.
Partizan, who have won six of the last seven Serbian league titles, are five points clear of second-placed Red Star with six games left.
The derby frequently results in trouble. In May 2013, 104 arrests were made after fans clashed at a game. Fans burned seats at the final whistle of that match.
Partizan, who finished second in the league last season, ended up in the Champions League after Red Star were kicked out for failing to pay debts.