郭衍字彦文,自称是太原介休人。父郭崇,以舍人之职跟随魏孝武帝入关中,官至侍中。
郭衍少年时骁勇英武,善于骑马射箭。周武帝建德中,因军功累迁至仪同大将军。又跟从周武帝平定并州,因功加授开府,封爵武强县公,赐姓叱罗氏。宣政元年(578),官右中军熊渠中大夫。尉迟迥作乱,跟从韦孝宽讨伐之,因功授上柱国,封爵武山郡公。秘密劝谏隋文帝诛杀周室诸王,早行禅代之事,因此很得隋文帝的亲昵。
开皇元年(581),郭衍恢复原姓郭氏。突厥进犯边塞,隋文帝任命郭衍为行军总管,率兵屯居平凉。几年间,突厥人不敢进犯边境。征为开漕渠大监。统率所部水利工人,开凿水渠引渭水,经过大兴城往北,再往东到潼关,水道运输四百多里,关中都依赖这条水渠,称之为“富人渠”。开皇五年,郭衍任瀛州刺史,遇到连绵秋雨,发生洪水,所辖各县大部分都被洪水淹没,百姓都爬上高树,依靠大的土冢求生。郭衍亲自准备船只木筏,带着粮食去拯救灾民,许多灾民得到救济。郭衍先开仓赈济灾民,然后才上奏朝廷。隋文帝十分称赞郭衍此举,晋升郭衍为朔州总管。所辖有恒安镇,北与蕃夷接壤,常有转运粮草之劳。郭衍就选土地肥沃的地方,驻扎军队开荒种地作为军饷,每年收获粮食一万多石,免除了人们转运粮草的劳苦。又建筑桑乾镇。这些都符合文帝的意思。开皇十年,跟从晋王杨广外出镇守扬州。适逢江东发生叛乱,命郭衍为总管,先屯兵京口。贵州之南与贼兵交战,大败贼兵。接着讨伐东阳、永嘉、宣城、黟、歙诸处,全都平定乱贼。授任蒋州刺史。
郭衍对下十分傲慢,对上十分卑下。晋王杨广喜爱亲昵他,宴乐赏赐十分丰厚。改任洪州总管。晋王有争立太子之计,把郭衍视作心腹,派遣宇文述将实情告诉郭衍。郭衍大喜,说:“如果谋划的事情成功,晋王自然可以成为皇太子,假如不能成功,亦可依托淮海,恢复梁、陈的形势,割据江南。到时候我就成了皇太子的酒宴之客,谁还能把我怎么样!”晋王于是召见郭衍,暗地里一起计议。郭衍恐怕人们怀疑他无故和晋王来往,假托妻子患有瘿疾,晋王妃萧氏有医术能够治疗。郭衍就把这种情况上奏,文帝听任他和妻子一起到江都,来往没有限制。郭衍又谎称广州俚人造反,晋王就奏请让郭衍领兵征讨。于是,郭衍大肆修治铠甲器械,暗地扩充军队。晋王杨广入宫为太子,征郭衍入京,授职左监门率,转任左宗卫率。文帝将死于仁寿宫,太子和杨素假托皇帝诏令,令郭衍和宇文述统领东宫兵马,兼领上台宿卫,宫门的禁领都由二人决定。文帝驾崩,汉王起兵造反,京城空虚。让郭衍迅速返回京城,统率兵马防守。
大业元年(605),郭衍任左武卫将军。炀帝巡幸江都,令郭衍统领左军,改任光禄大夫。又跟从炀帝远征吐谷浑,出兵金山道,接受投降之人二万多户。郭衍能够揣度皇帝的意思,阿谀逢迎,顺从旨命,炀帝常常对人说:“只有郭衍的心思与朕相同。”郭衍又曾劝炀帝寻求快乐,五天上一次朝理事,不要效法高祖白白辛劳。炀帝听从他的建议,更加称赞郭衍孝顺。当初,新令施行的时候,郭衍的封爵依照旧例免除。大业六年(611),因得到炀帝的恩幸依旧封为真定侯。跟从炀帝去江都,死于途中。追赠左大将军,谥号为襄。
长子郭臻,官武牙郎将。次子嗣本,任孝昌令。