这时,洛阳已经闹得一塌糊涂,局面不可收拾。惠帝昏庸至极,任人摆弄,大晋江山岌岌可危 。河间王司马颙不服从朝廷的命令,天天谋划着造反,长史李含又从旁挑拨,司马颙更加飞扬跋扈。成都王司马颖仗着自己德高望重,目中无人。长沙王司马乂把持朝政,事事都与司马颖商量,司马颖却还不知足,反与司马颙密谋铲除司马乂。司马颙写信约司马颖共同讨伐司马乂。不料朝廷传下诏书,惠帝欲亲征讨伐司马颙,命司马乂统领全国军事。一场大战由此开始了。司马颙任命张方为都督,率七万精兵从函谷出发向洛阳东面进攻。司马颖令陆机为前将军都督,率兵二十万攻向洛阳。
洛阳这边,惠帝亲自督战,长沙王司马乂一举将司马颖的军队击败,转而攻打司马颙。司马颙的都督张方率领军队靠近城门,见皇帝亲临,不禁沮丧,急忙后退。张方想要继续作战,部下却纷纷逃散,张方只好撤退。司马乂带兵从后面追上,杀死了张方五千多名士兵。张方退到十三里桥,鼓舞军心,带兵连夜前进数里,沿路修筑多重堡垒,为持久战做准备。司马乂骄傲轻敌,与张方再次交战后竟然失利。又过一年司马乂聚众誓师,鼓舞将士们和司马颖的军队决战。司马乂的军队屡战屡胜,斩杀司马颖的部下六七万人。张方见司马颖失败,准备退兵之际,探听到都城粮食不足,料想城中将有内乱,于是留兵待变。果然不到几天,左卫将军朱默和东海王司马越通谋,勾结殿内的将士把司马乂拿下。都城将士觉得自己被司马越蒙骗,准备拥护司马乂反抗司马越。司马越知道后,不禁慌张起来,召来黄门侍郎潘滔商量,打算借张方之手灭掉司马乂。张方杀人不眨眼,命人把司马乂锁在柱子上活活用炭烤死了。
成都王司马颖进了都城后,派部将石超等人率领五万兵马分守十二城门。司马颖自命丞相,晋升司马越为尚书令。司马颙上疏给惠帝称司马颖有大功,可作为储副,又建议废除羊皇后。晋惠帝虽然舍不得美人,但也没办法,只好忍痛将羊皇后废为庶人,迁居金墉城,把皇太子司马覃降为清河王,立司马颖为皇太弟,统领中外军事,兼任丞相,并把他迁到邺城。提拔司马颙为太宰大都督,兼任雍州牧。
司马颖被封为皇太弟后,骄纵恣肆,目无君主。其随从孟玖等人又仗势横行,司马颖在众人心中的威望因此大大降低。右卫将军陈眕等人纷纷怂恿东海王司马越讨伐司马颖。司马越奏请惠帝北伐,自命大都督,沿途司马越不断招兵买马,募集了十万新兵。邺城民众得知后一片惊恐。
司马越驻军荡阴,打探到邺城人心不定,以为没什么隐患,就没有严加防备。哪知道司马颖的部将石超带兵杀来,气势汹汹,转眼间就攻破了司马越的军营。司马越仓皇逃命,竟无暇顾及惠帝。侍中嵇绍也在保护惠帝时被乱军所杀,血染帝衣,后左右欲为惠帝洗浣,惠帝竟黯然道:“这是嵇侍中血,何必浣去。”
石超向司马颖告捷。司马颖命令卢志前去迎驾,和惠帝一同进入邺城。到了邺城,惠帝下诏大赦,改永安元年(304年)为建武元年。此时张方已经占据了洛阳,在洛阳城内独断专行。
司马颖命右司马和演为幽州刺史,让他杀害王浚。安北将军王浚曾是幽州统领,司马颖讨伐赵王司马伦时,司马颖曾让王浚起兵相助,王浚没有答应。于是司马颖怀恨在心,想要报复王浚。王浚知道司马颖不怀好意,决定联合其他力量讨伐司马颖。王浚又邀同并州刺史东嬴公司马腾联兵攻打邺城,司马腾答应下来。幽、并两州的将士以及乌桓、鲜卑的军队共十万人,直接朝邺城杀来。
司马颖和将领们商议军情,冠军将军刘渊说:“我曾奉命担任五部大都督 ,如今愿意为殿下说服五部一起抵御强敌。”于是司马颖封刘渊为北单于,让他马上出发。
刘渊辞别司马颖,来到左国城。匈奴右贤王刘宣和部众联名要求刘渊接受大单于的封号。刘渊接受了,共得部下五万人,定都离石,命儿子刘聪为鹿蠡王。刘渊令部将刘宏带着五千精兵支援邺城。这时,王浚和东嬴公司马腾已经打败了颖军将领王斌,正长驱直入邺城。石超带兵抵御,在平棘大败,退回邺城。邺城内一片惊乱,中书监卢志劝司马颖赶紧带惠帝前往洛阳。司马颖惊慌失措,只带了数十人,和卢志一起带着惠帝朝洛阳逃去。此时邺城已经被王浚各军抢劫一空。乌桓部酋没有追到司马颖,就和王浚等人一同回去了。邺城已经残破不堪,刘渊所派部将刘宏来不及支援,只好退兵回去,向刘渊报告。