西晋时期,大量游牧民族内迁,主要有匈奴、羯、氐、羌以及鲜卑五族,史称“五胡。”这些外族被世族收作奴婢,这些内迁的外来民族在八王之乱后趁机举兵,造成五胡乱华的局面。
太康元年(280年),西晋灭亡东吴,统一中国。不久,晋王朝内部矛盾激化,宗室诸王争权夺位,战祸连年,天灾不断,疾疫流行,赋敛如故,大量被迫沦为流民,不断爆发反晋起义。
元康二年,匈奴人郝散起兵攻上党(今山西潞城东北);两年后,其弟度元联合冯翊、北地等郡的马兰羌、卢水胡起兵反晋,秦(治今甘肃甘谷东)、雍(治今西安西北)二州氐、羌数十万民众纷起响应,共推氐帅齐万年为帝。先后攻打天水、略阳、始平、武都、阳平诸郡,晋军“诸将覆败相继”。后晋廷遣积弩将军孟观率京师宿卫军前往镇压,起义失败,齐万年被俘。从此,遍及各地的流民大起义此起彼伏。这时期国内主要矛盾从汉族统治阶级内部转化为汉族统治阶级与割据的少数民族分裂势力之间的矛盾。并且从从晋怀帝永嘉元年的307年到311年五年中连续遭受旱灾、蝗灾等严重自然灾害、统治阶级内部的矛盾等因素影响,使内迁割据都城附近的匈奴集团占领洛阳,晋怀帝被匈奴军队俘虏,并且在次年遇害。
永宁元年(301年)十月,略阳?(巴氐)人李特、李雄领导秦、雍六郡流民在益州(治今成都)起义。时关中干旱,连年饥荒,六郡汉、氐、羌、密等各族民众10余万人经汉川流入巴蜀地区就食。当地官府逼迫其返乡,激起流民起义,屡败晋军,攻占广汉,进围成都(今属四川)。李特与蜀人约法三章,赈贷贫人,得到益州民众的支持。后李特战死,其弟李流和其子李雄继续领统义军,于晋太安二年(303年)闰十二月,逐走晋益州刺史罗尚,攻下成都。翌年,李雄称成都王,后称帝,建成国。至成玉恒四年(338年)四月,李骧(李特弟)之子李寿即位,改国号为汉。秦、雍六郡流民起义,是西晋末年流民起义中规模最大的一次。李雄建立的成汉政权,共存在44年之久,直至成汉嘉宁二年(347年),为东晋都督荆、司等六州诸军事桓温率军消灭。
太安二年(303)五月,晋廷急征荆州壮勇赴益州,遭到荆州民众的强烈反抗。曾任泽区吏的义阳(今河南信阳西北)蛮民首领张昌,在安陆(今湖北云梦)石岩山聚众起义,荆地区的流民和逃避戍役的丁壮纷纷参加。张昌立山都县(今湖北谷城东南)吏丘沈为天子,自为相国。趁晋廷诸王争夺朝权之机,分兵四出攻城略地。南破武昌(今湖北鄂州)、长沙、湘东(郡治酃县,今湖南衡阳市)、零陵;东攻弋阳(今河南潢川西);北克宛(今河南南阳市)、襄阳,杀西晋都督荆州诸军事新野王司马歆。部将石冰和封云率领东路义军,攻占江(治今南昌)、扬(治今南京)二州。其势力迅速扩大到荆、江、徐(治今江苏徐州)、扬、豫(治今河南淮阳)五州的大部地区。同年七月,西晋荆州刺史刘弘调集大军围攻张昌,起义军被晋将陶侃率部击败。次年八月,张昌被俘杀。荆州流民起义遂被镇压。
永嘉四年九月,雍州部分民众流移至宛县一带就食、晋廷逼令流民归还故里,遭到流民强烈反抗。京兆人王如在宛乘势发动起义,南安人庞定、冯翊人严嶷、京兆人侯脱等各率众响应,聚至四五万人,于汉、沔及襄、阳一带,屡败晋军。王如自称大将军,领司、雍二州牧。王如乘汉镇东大将军石勒率部进至宛县,借机与其联结消灭异己,最后他也被石勒击败,永嘉六年投降晋扬州刺史王敦,被杀。
西晋永嘉五年元月,巴蜀流民数万家为避战乱,流亡到荆、湘地区。湘州刺史荀眺欲尽诛流民,四、五万家流民愤而皆反,共推蜀人杜弢为主。杜弢自称梁、益二州牧,领湘州刺史,率众攻占长沙,生擒荀眺。攻克零陵(今属湖南)、桂阳(今湖南郴州),又东击武昌(今湖北鄂州)、袭沔阳(今湖北沔阳西南),占据豫章(今南昌),屡败晋军。建兴三年(315年),晋琅玡王司马睿遣征南将军王敦、荆州刺史陶侃集结大军,围攻杜弢,义军将士死伤甚众,部将王真降晋。杜弢突围逃遁,死于途中。
在北方中原爆发的多起民众起义中石勒和王弥领导的山东、河北起义影响最大。永兴二年(305年)七月,石勒同马牧帅汲桑率数百骑参加公师藩在赵(今晋冀豫部分地区)、魏(今冀鲁豫部分地区)的反晋起义。不久,公师藩兵败被杀。永嘉元年三月,石勒和汲桑再度起义。五月,攻占邺城(今河北临漳西南),杀晋新蔡王司马腾。八月,在东武阳(今山东朝城西)为晋兖州刺史苟唏部所败,汲桑被杀,石勒往投汉王刘渊。光熙元年(306年)三月,东莱郡(治今山东掖县)大族王弥参加怰县令刘伯根率万人反晋起义。后刘伯根战死,王弥继统其众,转战于今河北、山东、安徽、河南等地,有众数万。永嘉二年五月,兵临洛阳(今洛阳东北),使晋廷“京邑大震,宫城门昼闭”。后被晋司徒王衍率大军击败,王弥率余部投奔刘渊。