치명적 오류: CALL_AND_RETRIY_LAST 할당 실패 - 프로세스 메모리 부족
이 드노 은버입니다.v0.11.13
시 은 다음과 같습니다.sudo top
보다 높지 않은3%
이 오류를 재현하는 코드:
var request = require('request')
var nodedump = require('nodedump')
request.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2",function(err,res)
{
var data
console.log( "Data received." );
data = JSON.parse(res.body)
console.log( "Data parsed." );
data = nodedump.dump(data)
console.log( "Data dumped." );
console.log( data )
})
재귀 스택 크기 문제가 있는지 확인하기 위해 --stack-size=60000 매개 변수로 다음 코드를 실행했습니다.
var depth = 0;
(function recurse() {
// log at every 500 calls
(++depth % 500) || console.log(depth);
recurse();
})();
그리고 가지고 있습니다.
264500
Segmentation fault
오류: CALL_AND_RETRY_LAST - 매개 부족 : CALL_AND_RETRIY_LAST 파일: --stack-size=60000 파일:Segmentation fault
.
그래서 결론을 내가CALL_AND_RETRY_LAST
재귀 스택 크기와 공통점이 없습니다.
어떻게 하면 이 문제를 해결할 수 있을까요?이 작업을 성공적으로 마칠 수 있을 정도로 컴퓨터에 사용 가능한 메모리가 충분하다고 생각합니다.
이 .CALL_AND_RETRY_LAST
그래서 제가 질문을 따로 만든 것입니다.
소스: github/v8을 보면 매우 큰 개체를 예약하려고 하는 것 같습니다.제 경험에 따르면 큰 JSON 개체를 구문 분석하려고 하면 발생하지만 JSON 및 노드 0.11.13을 사용하여 출력을 구문 분석하려고 하면 잘 작동합니다.
더 이상 필요하지 않습니다.--stack-size
가 더 필요합니다: 메리가더필다니합요.--max_new_space_size
및/는--max_old_space_size
.
제가 옆에서 알려드릴 수 있는 유일한 힌트는 다른 JSON 파서를 시도하거나 입력 형식을 JSON 라인이 아닌 JSON 라인으로 변경하는 것입니다.
$ sudo npm i -g increase-memory-limit
프로젝트의 루트 위치에서 실행:
$ increase-memory-limit
이 도구는 node_dll/.bin/* 파일 내의 모든 노드 호출에 --max-old-space-size=4096을 추가합니다.
Node.js 버전 > = 8 - 폐지 안내
에는 NodeJs V8.0.0 할 수 .--max-old-space-size
NODE_OPTIONS= 명령...
$ export NODE_OPTIONS=--max_old_space_size=4096
응용 .--max_old_space_size
기본적으로 Node.js의 메모리 제한은 512MB입니다.
node --max_old_space_size=2000 server.js
참고: 전자 응용 프로그램에 미치는 영향에 대한 설명의 경고를 참조하십시오.
2017년 8월에 제공된 v8.0 기준으로 NODE_OPTIONS 환경 변수는 이 구성을 표시합니다(NODE_OPTIONS가 8.x!에 상륙한 경우 참조).문서에 따르면 소스에 화이트리스트된 옵션(참고: 최신 링크 아님!)만 허용됩니다. 여기에는 다음이 포함됩니다."--max_old_space_size"
이 기사의 제목은 약간 오해의 소지가 있는 것 같습니다. NODE_OPTIONS가 이미 존재했던 것 같습니다. 하지만 이 옵션을 노출했는지는 확실하지 않습니다.
그래서 제가 넣었습니다..bashrc
:
export NODE_OPTIONS=--max_old_space_size=4096
나는 그것을 발견했습니다.max_new_space_size
4 및 § 4.1.1에서는 .max_old_space_size
그것만으로는 제 문제가 해결되지 않았습니다.나는 다음을 내 쉬방에 추가하고 있고 이것들의 조합은 효과가 있는 것 같습니다.
#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096
[EDIT]: 4096 === 4GB의 메모리, 장치의 메모리가 부족한 경우 더 적은 양을 선택할 수 있습니다.
[업데이트]:또한 이전에 그렇게 실행된 grunt를 실행하는 동안 이 오류를 발견했습니다.
./node_modules/.bin/grunt
명령을 다음으로 업데이트한 후 메모리 오류가 발생하지 않습니다.
node --max_old_space_size=2048 ./node_modules/.bin/grunt
그increase-memory-limit
모듈이 이제 더 이상 사용되지 않습니다.2017년 8월에 출하된 Node.js v8.0 기준으로, 우리는 이제NODE_OPTIONS
하여 env를 설정합니다.max_old_space_size
global
export NODE_OPTIONS=--max_old_space_size=4096
참조 URL: https://github.com/endel/increase-memory-limit
위의 답변에 대한 변형일 뿐입니다.
위의 straight up node 명령을 시도했지만 성공하지 못했습니다. 하지만 이 Angular CLI 문제의 제안은 효과가 있었습니다. 당신은 당신의 웹사이트에 노드 스크립트를 만듭니다.package.json
운영 빌드를 실행할 때 노드에서 사용할 수 있는 메모리를 늘립니다.
할 수 있는 (Node에서 사용할 수 있는 메모리를 4GB로 늘립니다.)max-old-space-size=4096
는 ), 노드 명령어입니다.node --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod
(필요에 따라 메모리 양을 늘리거나 줄입니다. 4gb도 괜찮았지만 더 많이 필요하거나 더 적게 필요할 수도 있습니다.)그런 다음 패키지에 추가합니다.json 'json' 섹션은 다음과 같습니다.
"prod": "node --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod"
사용 가능한 다른 스크립트와 함께 스크립트 개체에 포함됩니다. 예:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"prod": "node --max-old-space-size=4096./node_modules/@angular/cli/bin/ng build --prod"
}
그리고 당신은 그것을 전화로 실행합니다.npm run prod
해야 할 수도 .)sudo npm run prod
Mac 또는 Linux를 사용하는 경우).
노드에 더 많은 메모리가 필요한 근본적인 문제가 있을 수 있습니다. 이 경우에는 이 문제를 해결하지 못합니다. 하지만 적어도 빌드를 수행하는 데 필요한 메모리는 노드에 제공합니다.
제 작업 솔루션은 다음과 같습니다.
- 교차 환경 설치
npm install --save-dev cross-env
또는npm install -g cross-env
. - 파
package.json
빌드
... "build:prod:ios": "cross-env NODE_OPTIONS='--max-old-space-size=8192' ionic cordova build ios --prod --release" ...
다음 번에는 이 명령을 사용하여 빌드하십시오.
npm run build:prod:ios
문제는 해결됐습니다.
또한 실수로 x64 대신 x86 버전의 노드를 설치했는지도 확인해야 합니다.nodejs.org 이 제 x64 컴퓨터에서 x86을 미리 선택했기 때문에 제게 일어난 일입니다.
윈도우즈 시스템에서 아래 명령을 실행합니다.
NODE_OPTIONS=--max_old_space_size=4096을 설정합니다.
Azure 빌드 파이프라인에서 이 오류가 발생하면 아래 단계에서 빌드 에이전트의 환경 변수를 변경하십시오.
를 합니다.Azure build pipeline task
->Azure powershell script:Inlinescript
아래 설정으로 컴파일하기 전에
- task: AzurePowerShell@3
displayName: 'Azure PowerShell script: InlineScript'
inputs:
azureSubscription: 'NYCSCA Azure Dev/Test (ea91a274-55c6-461c-a11d-758ef02c2698)'
ScriptType: InlineScript
Inline: '[Environment]::SetEnvironmentVariable("NODE_OPTIONS", "--max_old_space_size=16384", "Machine")'
FailOnStandardError: true
azurePowerShellVersion: LatestVersion
나는 이 문제로 며칠을 잃었습니다.어떤 파일에서 하나의 정적 파일, 즉 빌드된 파일을 가져오는 것을 발견할 때까지.그것은 빌드가 끝나지 않도록 만듭니다.다음과 같은 것:
import PropTypes from "../static/build/prop-types";
실제 소스로 수정하면 모든 문제가 해결됩니다.
나의 해결책을 공유하는 것.:)
이 문제는 react-native 번들을 생성할 때 확인되었습니다.시도했지만 실패한 것들:
- 증하는것가를 시킵니다.
node --max_old_space_size
했고 저는 할 수 없습니다. - 노드 버전을 6.9.1로 다운그레이드해야 한다고 언급한 곳도 있는데, 저도 그렇게 하지 않았습니다.당신에게 도움이 될 수도 있기 때문에 여기에 두고 싶습니다.
제게 효과가 있었던 것은 코드에 있는 매우 큰 파일을 가져오는 것이었습니다.내가 해결한 방법은 그것을 포함하는 것이었습니다.ignore
에 열거하다..babelrc
다음과 같은 것:
{
"presets": ["react-native"],
"plugins": ["transform-inline-environment-variables"],
"ignore": ["*.json","filepathToIgnore.ext"]
}
은 것은였습니다..js
파일을 변환하고 무시 목록에 추가할 필요가 없는 파일이 도움이 되었습니다.
저는 이 문제에 대해 이온적으로 직면했고 많은 해결책을 시도했지만 이것을 실행함으로써 해결했습니다.
MAC의 경우: 노드 --max-old-space-size=4096 /usr/local/bin/ionic cordova 빌드 Android --message
Windows의 경우: 노드 --max-old-space-size=4096 /Users/{youruser}/AppData/Roaming/npm/node_modules/ionic/bin/ionic cordova 빌드 창 --modules
npm install -g increase-memory-limit
메모리 증가 한계
OR
- % -> 또는 %appdata% -> npm 파일로합니다.
C:\Users\{user_name}\AppData\Roaming\npm
- 즐겨찾는 편집기에서 ng.cmd 열기
- 더하다
--max_old_space_size=8192
에▁IF
그리고.ELSE
블록
now ng.vmdk 파일은 변경 후 다음과 같습니다.
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "--max_old_space_size=8192" "%~dp0\node_modules\@angular\cli\bin\ng" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "--max_old_space_size=8192" "%~dp0\node_modules\@angular\cli\bin\ng" %*
)
#! /usr/bin/env 노드 --max-old-space-size= 4096 in the ionic-app-patch.js dint work
하지만 수정 후: 다음 파일이 작동했습니다.
node_proxy/.bin/ionic-app-proxy.dll
추가:
@IF EXIS "%~dp0\node.exe"("%~dp0\node.exe" "%~dp0..@ionic\app-property\bin\ionic-app-property.js" %*) ELSE(@SETLOCAL @SETPATHEXT=%PATHEXT:;JS;=;% 노드 --max_old_space_size=4096%~dp0.@ionic\app-patch\bin\ionic-app-patch.js" %*)
교체했습니다
ng build --prod
와 함께
node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod
그래서 사용하는 대신ng build --prod
위의 명령어를 사용하면 다음과 같이 시작합니다.node..
생산빌생위사해용없다습을 사용할 가 없습니다.ng server --prod
.
사용하지 않으려는 경우--prod
그냥 그것을 제거하세요.
그래서 이것들은 코드 터미널 대 코드 터미널에서 사용할 명령입니다.
node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod
node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve
이 오류는 실행에 할당된 필요한 메모리가 실행 프로세스에 필요한 메모리보다 작을 때 발생합니다.기본적으로 노드 메모리 크기는 512MB이며 이를 늘리려면 다음 명령을 입력해야 합니다.
node --max-old-space-size= <NewSize> <fileName>
대안적인 해결책은 AOT 컴파일러를 비활성화하는 것입니다.
ng build --prod --aot false
언급URL : https://stackoverflow.com/questions/26094420/fatal-error-call-and-retry-last-allocation-failed-process-out-of-memory
'programing' 카테고리의 다른 글
처리된 이벤트를 두 번 클릭한 후 편집 모드 종료/비활성화 (0) | 2023.09.02 |
---|---|
필드를 업데이트하여 기존 값에 가치를 추가하는 방법은 무엇입니까? (0) | 2023.09.02 |
중간 클릭을 사용하여 클릭 시 이벤트 트리거링 (0) | 2023.09.02 |
ASP.NET MVC & 웹 서비스 (0) | 2023.08.28 |
Postgres와 MariaDb 사이의 다른 동작을 최적으로 잠그는 최대 절전 모드 (0) | 2023.08.28 |