This sort of behavior is often related to selectivity - maybe your parameterization is too simple and/or needs some temporal variability to take the catches out of the correct ages. You can look at the F-at-age and see if the spiking F's are associated with just one or a few ages in particular years. Another potential solution is to aggregate or partition fleets differently, such that you aren't getting unrealistic age-specific spikes in F. You might also try turning down the likelihood of the age data for the offending fleets (just temporarily) to see if the problem gets better or worse. This can help identify contradictory signals (such as catch at age that is inconsistent with recruitment strength information from other sources).