Bobbing in the waves alongside floating garbage, the fish, mostly sardines, washed ashore near the international airport, about 30 kilometers (20 miles) from where Brazil will hold the 2016 Olympic sailing courses.
Masses of dead fish have previously been found floating in the bay in October 2014 and February 2015, when more than 12 tons were removed.
Authorities have blamed the tropical heat, but some residents are doubtful.
“It’s because of the contamination of the water, it isn’t a natural phenomenon. The water is very, very polluted,” said Roger Texeira, a 45-year-old travel agent.
Environmental authorities said they were investigating whether the fish may have been dumped by commercial fishermen who were trying to catch more valuable species.
The Rio state government had vowed a major clean-up of Guanabara bay for the Olympics, but now admits it will not meet its goal.
But Olympic organizers say the sailing venue will be clean and that competitors will not face any health risks.