TrilonIO / aspnetcore-angular-universal

ASP.NET Core & Angular Universal advanced starter - PWA w/ server-side rendering for SEO, Bootstrap, i18n internationalization, TypeScript, unit testing, WebAPI REST setup, SignalR, Swagger docs, and more! By @TrilonIO
https://www.trilon.io
MIT License
1.46k stars 434 forks source link

Azure Devops builds failing - Javascript Heap out of memory #736

Closed codehippie1 closed 5 years ago

codehippie1 commented 5 years ago

Getting "Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory" on all azure builds. Local builds are fine.

PS: I have seen Issue# 262

What did I try?

  1. I tried all steps listed on Issue 262
  2. Tried all solutions listed at https://developercommunity.visualstudio.com/content/problem/398343/azure-devops-pipeline-fatal-error-ineffective-mark.html
  3. Edited csproject msbuild task RunWebpack to add node --max_old_space_size=4096. I see this gets executed twice and max_old_space_size is being ignored the second time. See below error.
<Target Name="RunWebpack" AfterTargets="ComputeFilesToPublish">
    <Exec Command="npm install" />
    <Exec Command="node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod" />
    <Exec Command="node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js --env.prod" />
    <!-- Include the newly-built files in the publish output -->
    <ItemGroup>
      <DistFiles Include="wwwroot\dist\**; ClientApp\dist\**" />
      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
        <RelativePath>%(DistFiles.Identity)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      </ResolvedFileToPublish>
    </ItemGroup>
  </Target>

Exact Error:

Getting error at "RunWebpackBuild"
EXEC(0,0): Error : Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
Web.csproj(119,5): Error MSB3073: The command "node node_modules/webpack/bin/webpack.js --env.prod" exited with code 134.
Process 'msbuild.exe' exited with code '1'.

Location of Error:

node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod
  env = {"prod":true}
  Hash: 2e377ce94a017387bb5e67cbd26fb64a7dcb8f06
  Version: webpack 4.20.2
  Child
      Hash: 2e377ce94a017387bb5e
      Time: 2455ms
      Built at: 07/31/2019 6:47:48 PM
          Asset     Size  Chunks                    Chunk Names
      vendor.js  273 KiB       0  [emitted]  [big]  vendor
      Entrypoint vendor [big] = vendor.js

  Child
      Hash: 67cbd26fb64a7dcb8f06
      Time: 17716ms
      Built at: 07/31/2019 6:48:03 PM
          Asset     Size  Chunks             Chunk Names
      vendor.js  1.9 MiB       0  [emitted]  vendor
      Entrypoint vendor = vendor.js

node node_modules/webpack/bin/webpack.js --env.prod
[error]EXEC(0,0): Error : Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
[debug]Processed: vso[task.logissue type=Error;sourcepath=EXEC;linenumber=0;columnnumber=0;code=;]Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
EXEC : FATAL error : Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory [D:\a\3\s\SCACostingProgram\MAIN\SCACP\SCACP.Web\SCACP.Web.csproj]
   1: 00007FF79553C6AA v8::internal::GCIdleTimeHandler::GCIdleTimeHandler+4506
   2: 00007FF795517416 node::MakeCallback+4534
   3: 00007FF795517D90 node_module_register+2032
   4: 00007FF79583189E v8::internal::FatalProcessOutOfMemory+846
   5: 00007FF7958317CF v8::internal::FatalProcessOutOfMemory+639
   6: 00007FF795A17F94 v8::internal::Heap::MaxHeapGrowingFactor+9620
   7: 00007FF795A0EF76 v8::internal::ScavengeJob::operator=+24550
   8: 00007FF795A0D5CC v8::internal::ScavengeJob::operator=+17980
   9: 00007FF795A16317 v8::internal::Heap::MaxHeapGrowingFactor+2327
  10: 00007FF795A16396 v8::internal::Heap::MaxHeapGrowingFactor+2454
  11: 00007FF795B40637 v8::internal::Factory::NewFillerObject+55
  12: 00007FF795BBD826 v8::internal::operator<<+73494
  13: 000002B2769DC5C1 
alexbenitez commented 5 years ago

I do not know why but I got this error last week. I fixed our automated build by updating the webpack script as follows (I put a random higher number).

"build:webpack": "webpack --max_old_space_size=16384 --progress --color",

However, later I read that apparently, the correct approach is to set an environment variable

NODE_OPTIONS=--max_old_space_size=16384

Hope it helps.

codehippie1 commented 5 years ago

@alexbenitez I have tried "build:webpack": "webpack --max_old_space_size=16384 --progress --color", and it didnt work.

How to set the environment variable for Azure DevOps build agents? Where does the line of code you show go, file, location etc?

codehippie1 commented 5 years ago

@alexbenitez I just added a Azure powershell task to pipeline, just before build to set environment variable at machine level. It didn't work either.

See YAML below

steps:
- 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=4096", "Machine")'
    FailOnStandardError: true
    azurePowerShellVersion: LatestVersion
codehippie1 commented 5 years ago

Update: Anyone trying this on Azure build pipeline. I finally got it succeeded. Increased memory to 16384. Please note this step alone wasn't working. Needed same changes in csproj and package.json

Steps

  1. Add an Azure build pipeline task -> Azure powershell script:Inlinescript before Compile with below settings steps:
    - 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
strabek commented 5 years ago

@alexbenitez thanks for the tip NODE_OPTIONS=--max_old_space_size=16384. It worked perfectly.

ali-asghar1 commented 4 years ago

Update: Anyone trying this on Azure build pipeline. I finally got it succeeded. Increased memory to 16384. Please note this step alone wasn't working. Needed same changes in csproj and package.json

Steps

  1. Add an Azure build pipeline task -> Azure powershell script:Inlinescript before Compile with below settings steps:
- 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

@codehippie1 what changes are required for csproj and package.json files?

MrzJkl commented 3 years ago

Solution for Azure Pipeline in Azure DevOps:

- task: PowerShell@2
  displayName: Build
  env:
    NODE_OPTIONS: --max_old_space_size=16384

Set the Environment VariableNODE_OPTIONSwith value --max_old_space_size=16384 in your Build-Task.

jn-royalticgroup commented 3 years ago

Solución para Azure Pipeline en Azure DevOps:

- task: PowerShell@2
  displayName: Build
  env:
    NODE_OPTIONS: --max_old_space_size=16384

Establezca la Variable de entorno NODE_OPTIONScon valor --max_old_space_size=16384en su Tarea de compilación.

No funciona, debo tener esta varible en el package

advapiIT commented 1 year ago

I got this error when trying to run it

2023-08-05T07:55:39.1552140Z ##[section]Starting: PowerShell Script 2023-08-05T07:55:39.1998002Z ============================================================================== 2023-08-05T07:55:39.1998347Z Task : PowerShell 2023-08-05T07:55:39.1998582Z Description : Run a PowerShell script on Linux, macOS, or Windows 2023-08-05T07:55:39.1998804Z Version : 2.220.0 2023-08-05T07:55:39.1999026Z Author : Microsoft Corporation 2023-08-05T07:55:39.1999310Z Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell 2023-08-05T07:55:39.1999663Z ============================================================================== 2023-08-05T07:55:41.2025679Z Generating script. 2023-08-05T07:55:41.2852176Z ========================== Starting Command Output =========================== 2023-08-05T07:55:41.3104082Z ##[command]"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'F:\Ag2_work_temp\73e90371-e9d8-4834-b4bf-6d8c9cf3f029.ps1'" 2023-08-05T07:55:42.0673357Z ##[error]Exception calling "SetEnvironmentVariable" with "3" argument(s): "Requested registry access is not allowed." At F:\Ag2_work_temp\73e90371-e9d8-4834-b4bf-6d8c9cf3f029.ps1:4 char:1

The strange thing is that no one changed the pipeline, as well running old build that were succeding bring the javascript error