react项目build时发生“v8::internal::V8::FatalProcessOutOfMemory”异常

shouji.jpg
>>>我的博客<<<

现象

最近工程里有个用Ant Design Pro搭建的前后端分离的后台管理系统,一直使用jenkins自动部署的,但是今天一不小心build失败了。虽然很快就搞定了,但是还是记录一下,好记性不如烂笔头。

问题出现

构建失败信息是这样的:

<pre class="console-output" style="box-sizing: border-box; white-space: pre-wrap; word-wrap: break-word; margin: 0px; color: rgb(51, 51, 51); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">Started by user [超级管理员](http://jenkins.haier.haiqiang.xin:7776/user/admin)
Building in workspace /var/lib/jenkins/workspace/chuangke_pre_portal_web_auto_deploy
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url git@git.3vyd.com:portalmanage.git # timeout=10
Fetching upstream changes from git@git.3vyd.com:portalmanage.git
 > git --version # timeout=10
 > git fetch --tags --progress git@git.3vyd.com:portalmanage.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision c9a9d48ae6453a8d84734920f8718abec5598f2a (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f c9a9d48ae6453a8d84734920f8718abec5598f2a
Commit message: "直播统计"
 > git rev-list --no-walk 34ede46c51b5a223746b1c07d0845952d7d0eefd # timeout=10
[chuangke_pre_portal_web_auto_deploy] $ /bin/sh -xe /tmp/jenkins1426166608252484443.sh
+ yarn
yarn install v1.3.2
[1/4] Resolving packages...
success Already up-to-date.
Done in 2.31s.
+ REACT_APP_BRANCH=PRE
+ yarn build
yarn run v1.3.2
$ node scripts/build.js
Creating an optimized production build...

<--- Last few GCs --->

  780502 ms: Mark-sweep 1323.4 (1408.7) -> 1317.3 (1408.7) MB, 955.6 / 0.0 ms [allocation failure] [GC in old space requested].
  781304 ms: Mark-sweep 1317.3 (1408.7) -> 1317.3 (1410.7) MB, 802.4 / 0.0 ms [allocation failure] [GC in old space requested].
  782171 ms: Mark-sweep 1317.3 (1410.7) -> 1326.8 (1403.7) MB, 866.5 / 0.0 ms [last resort gc].
  782958 ms: Mark-sweep 1326.8 (1403.7) -> 1336.9 (1403.7) MB, 787.3 / 0.0 ms [last resort gc].

<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x1116596cf781 <JS Object>
    1: stringify [native json.js:~176] [pc=0x1ab7d7e562d3] (this=0x1116596c92a1 <a JSON with map 0xa5d18e09b09>,E=0x27fe2de64711 <an Object with map 0x23d396b32619>,F=0x111659604381 <undefined>,S=0x111659604381 <undefined>)
    2: arguments adaptor frame: 1->3
    3: /* anonymous */(aka /* anonymous */) [/var/lib/jenkins/workspace/chuangke_pre_portal_web_auto_deploy/node_modules/webpack/lib/Sou...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: node::Abort() [node]
 2: 0xdf1d9c [node]
 3: v8::Utils::ReportApiFailure(char const*, char const*) [node]
 4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node]
 5: v8::internal::Factory::NewRawTwoByteString(int, v8::internal::PretenureFlag) [node]
 6: v8::internal::String::SlowFlatten(v8::internal::Handle<v8::internal::ConsString>, v8::internal::PretenureFlag) [node]
 7: v8::internal::String::Flatten(v8::internal::Handle<v8::internal::String>, v8::internal::PretenureFlag) [node]
 8: v8::internal::BasicJsonStringifier::SerializeString(v8::internal::Handle<v8::internal::String>) [node]
 9: v8::internal::BasicJsonStringifier::Result v8::internal::BasicJsonStringifier::Serialize_<false>(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::Handle<v8::internal::Object>) [node]
10: v8::internal::BasicJsonStringifier::SerializeJSArraySlow(v8::internal::Handle<v8::internal::JSArray>, unsigned int, unsigned int) [node]
11: v8::internal::BasicJsonStringifier::Result v8::internal::BasicJsonStringifier::Serialize_<true>(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::Handle<v8::internal::Object>) [node]
12: v8::internal::BasicJsonStringifier::Result v8::internal::BasicJsonStringifier::Serialize_<false>(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::Handle<v8::internal::Object>) [node]
13: v8::internal::BasicJsonStringifier::Stringify(v8::internal::Handle<v8::internal::Object>) [node]
14: v8::internal::Runtime_BasicJSONStringify(int, v8::internal::Object**, v8::internal::Isolate*) [node]
15: 0x1ab7ca0092a7
error Command failed with signal "SIGABRT".
info Visit [https://yarnpkg.com/en/docs/cli/run](https://yarnpkg.com/en/docs/cli/run) for documentation about this command.
Build step 'Execute shell' marked build as failure
Sending e-mails to: marvin.ma@3vyd.com damon.shen@3vyd.com
Finished: FAILURE</pre>

解决思路

1、Jenkins服务器系统内存不够
看了看jenkins所在服务器的内存,在jenkins执行这个job的时候,内存最高也就140%,因为服务器是Centos 4核16G的配置,用free查看,可用内存仍然9G多。当时没有截图,所以就不贴图了,但是肯定不是说服务器内存吃紧导致的。

2、排除了服务器本身内存小的问题,考虑本次build新进的代码的问题,看了一下就两个commit,因为网上有说是调用file.write的时候处理不当,会导致该问题的产生的,正好本次build有一个commit是添加了富文本编辑器。
但是检查一圈好像没有问题。

3、框架问题,限制了内存。

解决方案

最后通过https://stackoverflow.com/questions/38558989/node-js-heap-out-of-memory一文找到了解决方案。先做本地部署尝试,修改该job的build命令,将原来的

yarn
REACT_APP_BRANCH=PRE yarn build

改成了

yarn
REACT_APP_BRANCH=PRE node --max-old-space-size=4096 scripts/build.js


jenkins build shell

重新build,success。

然后因为该项目分开发,测试、生产等多个环境,因此打算在代码框架里直接作为配置项,具体的做法是在package.json的build命令前加上指定内存的参数--max-old-space-size=4096。将原来的:

"scripts": {
    "start": "node scripts/start.js",
    "build": "node scripts/build.js",
    "test": "node scripts/test.js --env=jsdom"
  }

修改为:

  "scripts": {
    "start": "node scripts/start.js",
    "build": "node --max-old-space-size=4096 scripts/build.js",
    "test": "node scripts/test.js --env=jsdom"
  },

提交代码,jenkins修改回原来的yarn start,重新build, SUCCESS。
一劳永逸。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,900评论 25 707
  • Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/downlo...
    李国宝阅读 1,135评论 1 2
  • 从需求分析到产品设计 需求是产品创造或是迭代的重要根据,没有真实且详细的需求,就很难开展后续的工作;但如何让需求从...
    呆木子程阅读 3,764评论 6 26
  • 大学城环境特别好,婆娑的树影斑驳摇曳,花坛里芬芳馥郁的花随风娉婷,青青的草地生机盎然,阳光懒懒地洒在身上,暖暖...
    笨笨他姐阅读 223评论 0 0