早年经历
司马衷生于曹魏甘露四年(259年)。泰始三年(267年)正月丁卯日,司马衷被立为皇太子,时年九岁。泰始八年(272年)二月辛卯日,司马衷奉晋武帝命娶贾充的女儿贾南风为太子妃,贾南风当时十五岁,年长司马衷两岁。
登基
(290年)四月二十日,晋武帝去世,皇太子司马衷即位,是为晋司马衷,大赦,改年号为永熙。尊继母皇后杨芷(杨艳的堂妹)为皇太后,立妃贾南风为皇后。同年五月十三日,葬晋武帝于峻阳陵(今河南省偃师南蔡庄北)。
五月十八日,增加天下官位一级,参与晋武帝丧事的增加二级,免除百姓租税一年,二千石以上的官员都封为关中侯。以太尉杨骏为太傅,辅佐朝政。八月二十六日,立子广陵王司马遹为皇太子,以中书监何劭为太子太师,吏部尚书王戎为太子太傅,卫将军杨济为太子太保。派遣南中郎将石崇、射声校尉胡奕、长水校尉赵俊、扬烈将军赵欢将屯兵四出。后在291年正月改元为永平。晋司马衷当政后非常信任他的皇后贾南风。因此贾氏专权,甚至假造晋司马衷的诏书。永平元年(291年),迫害皇太后,废其太后位,杀大臣如太宰司马亮。同年又杀皇太后于金墉城。
元康四年(294年)和元康六年(296年)匈奴和其他民族反叛,氐人齐万年称帝,一直到元康九年(299年)这次反叛才被消灭。同年,贾南风开始迫害太子遹,首先废他的太子地位。[13]次年杀太子。这个举动成为许多反对贾后专政的皇族开始行动的起点。赵王司马伦假造诏书废杀贾后,杀大臣如司空张华等,自领相国位,这是八王之乱的开始。恢复原太子的地位,立故太子之子司马臧为皇太孙。
永康元年(300年)八月,淮南王司马允举兵讨伐司马伦,兵败被杀。同年十二月,益州刺史赵廞协同从中原逃到四川的流民在成都造反。
永宁元年(301年),司马伦篡位,自立为皇帝,司马衷被改为太上皇,太子司马臧被杀。三月,齐王司马冏起兵反司马伦,受到成都王司马颖、河间王司马颙、常山王司马乂等的支持。司马伦兵败。淮陵王司马漼杀司马伦的党羽,驱逐司马伦,引司马衷复位。司马伦被杀。五月,立襄阳王司马尚为皇太孙,并以羊献容为皇后。六月,东莱王司马蕤谋推翻司马冏的专权,事漏被废。十二月,李特开始在四川反晋,这是成汉的起点。
太安元年(302年),初皇太孙司马尚夭折,司马覃被立为太子。五月,李特在四川击败了司马颙派去讨伐他的军队,杀广汉太守张微,自立为大将军。
十二月,司马颖、司马颙、新野王司马歆和范阳王司马虓在洛阳聚会反司马冏的专政。司马乂乘机杀司马冏,成为朝内的权臣。
太安二年(303年)三月,李特在攻成都时被杀,但四月他的儿子李雄就占领了成都,到年末,李雄几乎占领了整个四川盆地。五月张昌、丘沈反,建国汉,杀司马歆。八月,司马颖和司马颙讨伐司马乂。十月,司马颙的军队攻入长安,在此后的洗劫中上万人死亡。此后两军在长安城外对阵,连十三岁的少年都被征军,同时两军都征募匈奴等的军队。最后司马乂兵败被杀。司马颙成为晋朝举足轻重的人物。