The usual suspects in the case of autonegotiations are:
- bad cables
- bad ports, SFPs or NICs
- port configs (are they both set to auto and do they both list the 1000BASE-T FD ability?)
- bugs, compatibility or legacy issues
I would not recommend a fixed speed and duplex setting in this (or almost any) situation. The days of frequent autoneg issues and incompatible implementations are gone, on recent equipment such issues are very rare. If autoneg is not working, switching to a fixed setting is a workaround, hiding the underlying issue that causes the autonegotiation to fail. Not fixing this issue might allow it to bite you later.
Also, the probability of speed or duplex mismatches and the like is actually much higher in an environment with fixed settings, caused by left over settings when moving equipment around.
As an example, if in your case the cable is to blame, setting both sides to 1000 fixed could disable the link with the faulty cable completely. Autonegotation gracefully degrades you to 100. It is of course up to you or your monitoring equipment to detect and fix this.
Interesting blog post, with links some vendor recommendations: "EtherealMind on Autonegotiation"