programing

치명적 오류: CALL_AND_RETRIY_LAST 할당 실패 - 프로세스 메모리 부족

telecom 2023. 9. 2. 07:57
반응형

치명적 오류: 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-sizeNODE_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_sizeglobal

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 prodMac 또는 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 번들을 생성할 때 확인되었습니다.시도했지만 실패한 것들:

  1. 증하는것가를 시킵니다.node --max_old_space_size했고 저는 할 수 없습니다.
  2. 노드 버전을 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

  1. % -> 또는 %appdata% -> npm 파일로합니다.C:\Users\{user_name}\AppData\Roaming\npm
  2. 즐겨찾는 편집기에서 ng.cmd 열기
  3. 더하다--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

반응형