본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍/Talk
  3. 일렉트론 vue-cli-plugin-electron-builder Heap 메모리 제한 해제 실패..

일렉트론 vue-cli-plugin-electron-builder Heap 메모리 제한 해제 실패..

· 댓글개 · KRFile
"electron:serve": "vue-cli-service electron:serve"

최근 vue-cli-plugin-electron-builder 라는걸로 개발을 하고 있는데 무슨 짓거리를 해도 vue-cli-service 로 실행하는 electron 의 Heap 메모리 제한을 해제할 수가 없습니다. ㅠㅠ

 

Node.js 버전도 64비트인데 어떤 방법을 사용하던 간에 2GB를 넘어서 힙 영역을 점유하는 순간 프로그램이 튕겨버립니다. 정확히 일렉트론 앱이 2700MB 메모리 이상을 점유하는 순간 튕겨버립니다.

 

 "dist:build2": "cross-env NODE_ENV=production NODE_OPTIONS='--max-old-space-size=8192' vue-cli-service electron:build"

인터넷에 나와 있는 방법으로는 --max-old-space-size 라는 환경 변수를 지정해서 해결 하는 방법이 대부분인데 윈도우 기본 환경 변수 설정 명령어인 set, 크로스 플랫폼 용으로 나온 cross-env 를 이용해서 --max-old-space-size 를 조정해도

 

https://soraji.github.io/front/2020/10/19/jsheapmemory/

 

[Vue.js] 자바스크립트 힙메모리 부족 ineffective mark-compacts near heap limit allocation failed - javascript heap ou

vue를 빌드하는데 갑자기

soraji.github.io

 

node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js vue-cli-service electron:serve

이런식으로 node로 vue-cli-service.js 를 직접 실행하면서 --max-old-space-size 를 조정해도, 이 대신에 --max_old_space_size 처럼 언더바로 값을 넣어도 어떤 방법을 사용하던 간에 일렉트론의 메모리 제한이 해제되지 않습니다.

 

분명 저는 background.ts 에서 제가 작성해둔 Promise.all() 코드를 호출하고 있기 때문에 일렉트론 자체 메모리 제한을 풀면 Node.js 런타임 힙 영역 제한도 풀려야 하는데 정말 정말 이상하네요.

,

몇 일간 고생했는데 결국 해결하지 못하고 포기했습니다..

 

npx cross-env NODE_OPTIONS=--max-old-space-size=8192 ts-node dcparser.ts

이런식으로 제가 작성해둔 Promise.all() 이 들어가 있는 타입스크립트 코드를 직접 실행하면 이때는 또 node.js 런타임의 힙 영역 메모리 제한이 해제 됩니다.

 

일렉트론에서 돌리면 계속 JavaScript heap out of memory 라는 메세지를 만나게 되서 정신이 아득해져 포기했습니다..

아마 vue-cli-service 를 이용해 일렉트론을 빌드하거나 개발하면 중간에 어떤 모종의 이유로 Node.js 런타임의 힙 영역이 2GB로 고정되는 문제로 보입니다.

 

프로젝트 전체 설정을 vue-cli-service 로 미리 해둬서 electron 명령어를 통해 실행시키게 하려면 파일을 다 바꿔야 하는데.. 진짜 머리 아프네요.

 

지금 생각해둔 해결 방법으로는 제 코드 자체를 최적화 해서 힙 영역을 2GB 이상 안쓰게 하거나 vue-cli-service 이외의 방법으로 일렉트론을 구동시킬 방법을 찾아봐야 할 거 같습니다.

 

혹시라도 해결 방법을 아시는 분이 있다면 댓글로 도움좀 부탁드립니다

 

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.