司馬衷生于曹魏甘露四年(259年)。泰始三年(267年)正月丁卯日,司馬衷被立為皇太子 ,時年九歲。 泰始八年(272年)二月辛卯日,司馬衷奉晉武帝命娶賈充的女兒 賈南風為太子妃,賈南風當時十五歲,年長司馬衷兩歲。
太熙元年 (290年)四月二十日,晉武帝去世,皇太子司馬衷即位,是為晉司馬衷,大赦,改年號為永熙。尊繼母皇后楊芷(楊艷的堂妹)為皇太后,立妃賈南風為皇后。同年五月十三日,葬晉武帝于峻陽陵(今 河南省 偃師南蔡莊北)。
五月十八日,增加天下官位一級,參與晉武帝喪事的增加二級,免除百姓租稅一年,二千石以上的官員都封為關中侯。以太尉楊駿為太傅,輔佐朝政。八月二十六日,立子廣陵王司馬遹為皇太子,以中書監何劭為太子太師,吏部尚書王戎為太子太傅,衛將軍楊濟為 太子太保。 派遣南中郎將石崇、射聲校尉胡奕、長水校尉趙俊、揚烈將軍趙歡將屯兵四出。 后在291年正月改元為 永平。
元康四年(294年)和元康六年(296年) 匈奴和其他民族反叛 ,氐人齊萬年稱帝,一直到元康九年(299年)這次反叛才被消滅。 同年,賈南風開始迫害太子遹,首先廢他的太子地位。 次年殺太子。 這個舉動成為許多反對賈后專政的皇族開始行動的起點。趙王司馬倫假造詔書廢殺賈后,殺大臣如 司空張華等,自領相國位,這是八王之亂的開始。恢復原太子的地位,立故太子之子司馬臧為皇太孫。
永康元年(300年)八月,淮南王司馬允舉兵討伐司馬倫,兵敗被殺。同年十二月,益州刺史趙廞協同從中原逃到四川的流民在成都造反。
永寧元年(301年),司馬倫篡位,自立為皇帝,司馬衷被改為太上皇,太子司馬臧被殺。 三月,齊王司馬冏起兵反 司馬倫,受到成都王司馬穎、河間王司馬颙、常山王司馬乂等的支持。司馬倫兵敗。淮陵王 司馬漼殺 司馬倫的黨羽,驅逐司馬倫,引司馬衷復位。司馬倫被殺。五月,立襄陽王司馬尚為皇太孫,并以羊獻容為皇后。六月,東萊王司馬蕤謀推翻 司馬冏的專權,事漏被廢。十二月,李特開始在四川反晉,這是成漢的起點。
太安元年(302年),初皇太孫 司馬尚夭折,司馬覃被立為太子。五月,李特在四川擊敗了 司馬颙派去討伐他的軍隊,殺廣漢太守張微,自立為 大將軍。 十二月,司馬穎、 司馬颙、新野王司馬歆和范陽王司馬虓在洛陽聚會反 司馬冏的專政。司馬乂乘機殺 司馬冏,成為朝內的權臣。
太安二年(303年)三月,李特在攻成都時被殺,但四月他的兒子李雄就占領了成都,到年末,李雄幾乎占領了整個 四川盆地。五月 張昌、 丘沈反,建國漢,殺 司馬歆。八月,司馬穎和 司馬颙討伐司馬乂。十月, 司馬颙的軍隊攻入長安,在此后的洗劫中上萬人死亡。此后兩軍在長安城外對陣,連十三歲的少年都被征軍,同時兩軍都征募匈奴等的軍隊。最后司馬乂兵敗被殺。司馬颙成為晉朝舉足輕重的人物。
光熙元年(306年),司馬越手下的 鮮卑軍隊攻入長安,大肆搶劫,二萬多人被殺。九月,司馬穎被俘,后被殺。
在“ 八王之亂”中,被 趙王 司馬倫篡奪了帝位。 光熙元年十一月十七日(307年1月8日)夜里,晉朝皇帝司馬衷在長安顯陽殿 駕崩,終年48歲,相傳被東海王司馬越毒殺,死后被安葬于太陽陵(今 河南 洛陽),他的弟弟司馬熾(284年-313年)即位,改元永嘉,即晉懷帝。