Guia de solução de problemas e práticas recomendadas para aplicativos de nó no Serviço de Aplicativo do Azure WindowsBest practices and troubleshooting guide for node applications on Azure App Service Windows

Neste artigo, você aprenderá as práticas recomendadas e as etapas de solução de problemas para aplicativos do Windows Node.js em execução no serviço Azure app (com iisnode).In this article, you learn best practices and troubleshooting steps for Windows Node.js applications running on Azure App Service (with iisnode).

Aviso

Tenha cuidado ao usar as etapas de solução de problemas no site de produção.Use caution when using troubleshooting steps on your production site. A recomendação é solucionar problemas do aplicativo em uma configuração que não seja de produção (por exemplo, o slot de preparo) e, quando o problema for corrigido, trocar o slot de preparo pelo slot de produção.Recommendation is to troubleshoot your app on a non-production setup for example your staging slot and when the issue is fixed, swap your staging slot with your production slot.

Configuração de IISNODIISNODE configuration

Este arquivo de esquema mostra todas as configurações que podem ser definidas para iisnode.This schema file shows all the settings that you can configure for iisnode. Algumas das configurações que são úteis para o seu aplicativo:Some of the settings that are useful for your application:

nodeProcessCountPerApplicationnodeProcessCountPerApplication

Essa configuração controla o número de processos de nó que são iniciados por aplicativo do IIS.This setting controls the number of node processes that are launched per IIS application. O valor padrão é 1.The default value is 1. É possível inicializar quantos node.exes de acordo com a contagem de vCPU de VM, alterando o valor para 0.You can launch as many node.exes as your VM vCPU count by changing the value to 0. O valor recomendado é 0 para a maioria dos aplicativos para que você possa utilizar todos os vCPUs do seu computador.The recommended value is 0 for most applications so you can use all of the vCPUs on your machine. Node.exe é de thread único para que um node.exe consuma um máximo de 1 vCPU.Node.exe is single-threaded so one node.exe consumes a maximum of 1 vCPU. Para obter o desempenho máximo do seu aplicativo de nó, você deseja usar todos os vCPUs.To get maximum performance out of your node application, you want to use all vCPUs.

nodeProcessCommandLinenodeProcessCommandLine

Essa configuração controla o caminho para node.exe.This setting controls the path to the node.exe. Você pode definir esse valor para apontar para sua versão de node.exe.You can set this value to point to your node.exe version.

maxConcurrentRequestsPerProcessmaxConcurrentRequestsPerProcess

Essa configuração controla o número máximo de solicitações simultâneas enviadas por iisnode a cada node.exe.This setting controls the maximum number of concurrent requests sent by iisnode to each node.exe. No Serviço de Aplicativo do Azure, o valor padrão é Infinito.On Azure App Service, the default value is Infinite. É possível configurar o valor, dependendo de quantas solicitações o aplicativo recebe e com que rapidez o aplicativo processa cada solicitação.You can configure the value depending on how many requests your application receives and how fast your application processes each request.

maxNamedPipeConnectionRetrymaxNamedPipeConnectionRetry

Essa configuração controla o número máximo de vezes que o iisnode tenta fazer novamente a conexão no pipe nomeado para enviar as solicitações para o node.exe.This setting controls the maximum number of times iisnode retries making the connection on the named pipe to send the requests to node.exe. Essa configuração, em combinação com namedPipeConnectionRetryDelay, determina o tempo limite total de cada solicitação em iisnode.This setting in combination with namedPipeConnectionRetryDelay determines the total timeout of each request within iisnode. O valor padrão é 200 no Serviço de Aplicativo do Azure.The default value is 200 on Azure App Service. Total Timeout em segundos = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay)/1000Total Timeout in seconds = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000

namedPipeConnectionRetryDelaynamedPipeConnectionRetryDelay

Essa configuração controla o tempo (em ms) pelo qual iisnode aguardará entre cada tentativa para enviar a solicitação a node.exe no pipe nomeado.This setting controls the amount of time (in ms) iisnode waits between each retry to send the request to node.exe over the named pipe. O valor padrão é 250 ms.The default value is 250 ms. Total Timeout em segundos = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay)/1000Total Timeout in seconds = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000

Por padrão, o tempo limite total no iisnode no Serviço de Aplicativo do Azure é 200 * 250 ms = 50 segundos.By default, the total timeout in iisnode on Azure App Service is 200 * 250 ms = 50 seconds.

logDirectorylogDirectory

Essa configuração controla o diretório em que o iisnode registrará em log stdout/stderr.This setting controls the directory where iisnode logs stdout/stderr. O valor padrão é iisnode, que é relativo ao diretório de scripts principal (o diretório em que o server.js principal está presente)The default value is iisnode, which is relative to the main script directory (directory where main server.js is present)

debuggerExtensionDlldebuggerExtensionDll

Essa configuração controla qual versão de node-inspector o iisnode usará ao depurar o aplicativo de nó.This setting controls what version of node-inspector iisnode uses when debugging your node application. Atualmente, iisnode-inspector-0.7.3.dll e iisnode-inspector.dll são os dois únicos valores válidos para essa configuração.Currently, iisnode-inspector-0.7.3.dll and iisnode-inspector.dll are the only two valid values for this setting. O valor padrão é iisnode-inspector-0.7.3.dll.The default value is iisnode-inspector-0.7.3.dll. A versão iisnode-inspector-0.7.3.dll usa o node-inspector-0.7.3 e usa soquetes da Web.The iisnode-inspector-0.7.3.dll version uses node-inspector-0.7.3 and uses web sockets. Habilite os soquetes da Web no WebApp do Azure para usar essa versão.Enable web sockets on your Azure webapp to use this version. Consulte https://ranjithblogs.azurewebsites.net/?p=98 para obter mais detalhes sobre como configurar o iisnode para usar o novo node-inspector.See https://ranjithblogs.azurewebsites.net/?p=98 for more details on how to configure iisnode to use the new node-inspector.

flushResponseflushResponse

O comportamento padrão do IIS é que ele armazena em buffer dados de resposta até 4 MB antes de liberá-los ou até o fim da resposta, o que ocorrer primeiro.The default behavior of IIS is that it buffers response data up to 4 MB before flushing, or until the end of the response, whichever comes first. O iisnode oferece uma configuração para substituir esse comportamento: para liberar um fragmento do corpo da entidade de resposta assim que o iisnode o receba de node.exe, você precisa definir o atributo iisnode/@flushResponse no web.config como 'true':iisnode offers a configuration setting to override this behavior: to flush a fragment of the response entity body as soon as iisnode receives it from node.exe, you need to set the iisnode/@flushResponse attribute in web.config to 'true':

<configuration>
    <system.webServer>
        <!-- ... -->
        <iisnode flushResponse="true" />
    </system.webServer>
</configuration>

Habilite a liberação de cada fragmento do corpo de entidade de resposta que adiciona uma sobrecarga de desempenho que reduz a taxa de transferência do sistema em aproximadamente 5% (a partir da v0.1.13).Enable the flushing of every fragment of the response entity body adds performance overhead that reduces the throughput of the system by ~5% (as of v0.1.13). O melhor para escopo dessa configuração apenas para nós de extremidade que requerem fluxo de resposta (por exemplo, usando o elemento <location> no web.config)The best to scope this setting only to endpoints that require response streaming (for example, using the <location> element in the web.config)

Além disso, para aplicativos de streaming, você também precisará definir responseBufferLimit do manipulador do iisnode como 0.In addition to this, for streaming applications, you must also set responseBufferLimit of your iisnode handler to 0.

<handlers>
    <add name="iisnode" path="app.js" verb="\*" modules="iisnode" responseBufferLimit="0"/>
</handlers>

watchedFileswatchedFiles

Uma lista separada por ponto e vírgula de arquivos que são observados para alterações.A semi-colon separated list of files that are watched for changes. Qualquer alteração em um arquivo faz com que o aplicativo seja reciclado.Any change to a file causes the application to recycle. Cada entrada consiste em um nome de diretório opcional, bem como um nome de arquivo necessário, que são relativos ao diretório em que o ponto de entrada principal do aplicativo está localizado.Each entry consists of an optional directory name as well as a required file name, which are relative to the directory where the main application entry point is located. Caracteres curinga são permitidos apenas na parte de nome de arquivo.Wild cards are allowed in the file name portion only. O valor padrão é *.js;iisnode.ymlThe default value is *.js;iisnode.yml

recycleSignalEnabledrecycleSignalEnabled

O valor padrão é false.The default value is false. Se habilitado, o aplicativo de nó pode se conectar a um pipe nomeado (variável de ambiente IISNODE_CONTROL_PIPE) e enviar uma mensagem de "reciclagem".If enabled, your node application can connect to a named pipe (environment variable IISNODE_CONTROL_PIPE) and send a “recycle” message. Isso fará com que w3wp seja reciclado normalmente.This causes the w3wp to recycle gracefully.

idlePageOutTimePeriodidlePageOutTimePeriod

O valor padrão é 0, o que significa que esse recurso está desabilitado.The default value is 0, which means this feature is disabled. Quando definido como um valor maior que 0, iisnode fará uma remoção de página de todos os seus processos filho a cada 'idlePageOutTimePeriod' em milissegundos.When set to some value greater than 0, iisnode will page out all its child processes every ‘idlePageOutTimePeriod’ in milliseconds. Confira a documentação para compreender o que a remoção de página significa.See documentation to understand what page out means. Essa configuração é útil para aplicativos que consomem uma grande quantidade de memória e desejam eliminar ocasionalmente a memória do disco para liberar memória RAM.This setting is useful for applications that consume a high amount of memory and want to page out memory to disk occasionally to free up RAM.

Aviso

Tenha cuidado ao habilitar as definições de configuração a seguir em aplicativos de produção.Use caution when enabling the following configuration settings on production applications. A recomendação é não as habilitar em aplicativos de produção ativos.The recommendation is to not enable them on live production applications.

debugHeaderEnableddebugHeaderEnabled

O valor padrão é false.The default value is false. Se configurado como verdadeiro, o iisnode adicionará um cabeçalho de resposta HTTP iisnode-debug a cada resposta HTTP que enviar ao valor do cabeçalho iisnode-debug como URL.If set to true, iisnode adds an HTTP response header iisnode-debug to every HTTP response it sends the iisnode-debug header value is a URL. Peças individuais de informações de diagnóstico podem ser obtidas observando o fragmento de URL, no entanto, uma visualização está disponível ao abrir a URL em um navegador.Individual pieces of diagnostic information can be obtained by looking at the URL fragment, however, a visualization is available by opening the URL in a browser.

loggingEnabledloggingEnabled

Essa configuração controla o registro em log de stdout e stderr por iisnode.This setting controls the logging of stdout and stderr by iisnode. Iisnode capturará stdout/stderr dos processos de nó que ele iniciar e gravará no diretório especificado na configuração 'logDirectory'.Iisnode captures stdout/stderr from node processes it launches and writes to the directory specified in the ‘logDirectory’ setting. Depois que isso for habilitado, o aplicativo gravará logs no sistema de arquivos e, dependendo da quantidade de logs realizados pelo aplicativo, poderá haver implicações de desempenho.Once this is enabled, your application writes logs to the file system and depending on the amount of logging done by the application, there could be performance implications.

devErrorsEnableddevErrorsEnabled

O valor padrão é false.The default value is false. Quando definido como true, iisnode exibirá o código de status HTTP e o código de erro Win32 no navegador.When set to true, iisnode displays the HTTP status code and Win32 error code on your browser. O código win32 será útil na depuração de certos tipos de problemas.The win32 code is helpful in debugging certain types of issues.

debuggingEnabled (não habilitar em sites de produção ativos)debuggingEnabled (do not enable on live production site)

Essa configuração controla o recurso de depuração.This setting controls debugging feature. Iisnode é integrado a node-inspector.Iisnode is integrated with node-inspector. Habilitando essa configuração, você habilita a depuração do aplicativo de nó.By enabling this setting, you enable debugging of your node application. Ao habilitar essa configuração, o iisnode cria arquivos node-inspector no diretório "debuggerVirtualDir" na primeira solicitação de depuração para o aplicativo de nó.Upon enabling this setting, iisnode creates node-inspector files in ‘debuggerVirtualDir’ directory on the first debug request to your node application. É possível carregar o node-inspector enviando uma solicitação para http://yoursite/server.js/debug.You can load the node-inspector by sending a request to http://yoursite/server.js/debug. Você pode controlar o segmento de URL de depuração com a configuração 'debuggerPathSegment'.You can control the debug URL segment with ‘debuggerPathSegment’ setting. Por padrão, debuggerPathSegment='debug'.By default, debuggerPathSegment=’debug’. É possível definir debuggerPathSegment para um GUID, por exemplo, para que seja mais difícil ser descoberto por outras pessoas.You can set debuggerPathSegment to a GUID, for example, so that it is more difficult to be discovered by others.

Leia Depurar aplicativos node.js no Windows para obter mais detalhes sobre a depuração.Read Debug node.js applications on Windows for more details on debugging.

Cenários e recomendações/solução de problemasScenarios and recommendations/troubleshooting

O aplicativo de nó está fazendo chamadas de saída excessivasMy node application is making excessive outbound calls

Muitos aplicativos desejam fazer conexões de saída como parte de suas operações normais.Many applications would want to make outbound connections as part of their regular operation. Por exemplo, quando uma solicitação chega, o aplicativo de nó deseja contatar uma API REST em outro lugar e obter algumas informações para processar a solicitação.For example, when a request comes in, your node app would want to contact a REST API elsewhere and get some information to process the request. Convém usar um agente keep alive ao fazer chamadas http ou https.You would want to use a keep alive agent when making http or https calls. Você poderia usar o módulo agentkeepalive como o agente keep alive ao fazer essas chamadas de saída.You could use the agentkeepalive module as your keep alive agent when making these outbound calls.

O módulo agentkeepalive garante que os soquetes sejam reutilizados na VM do WebApp do Azure.The agentkeepalive module ensures that sockets are reused on your Azure webapp VM. Criar um novo soquete em cada solicitação de saída adiciona sobrecarga ao aplicativo.Creating a new socket on each outbound request adds overhead to your application. O aplicativo reutilizar soquetes para solicitações de saída garante que o aplicativo não exceda os maxSockets alocados por VM.Having your application reuse sockets for outbound requests ensures that your application doesn't exceed the maxSockets that are allocated per VM. A recomendação no serviço de Azure App é definir o valor de maxSockets de agentKeepAlive para um total de (4 instâncias de node.exe * 32 maxSockets/Instance) 128 soquetes por VM.The recommendation on Azure App Service is to set the agentKeepAlive maxSockets value to a total of (4 instances of node.exe * 32 maxSockets/instance) 128 sockets per VM.

Exemplo de configuração de agentKeepALive :Example agentKeepALive configuration:

let keepaliveAgent = new Agent({
    maxSockets: 32,
    maxFreeSockets: 10,
    timeout: 60000,
    keepAliveTimeout: 300000
});

Importante

Este exemplo pressupõe que haja quatro node.exe em execução na VM.This example assumes you have 4 node.exe running on your VM. Se houver um número diferente de node.exe em execução na VM, você precisará modificar a configuração maxSockets de forma adequada.If you have a different number of node.exe running on the VM, you must modify the maxSockets setting accordingly.

O aplicativo de nó está consumindo muita CPUMy node application is consuming too much CPU

Você pode receber uma recomendação do Serviço de Aplicativo do Azure no portal sobre o alto consumo de CPU.You may receive a recommendation from Azure App Service on your portal about high cpu consumption. Você também pode configurar monitores para observar determinadas métricas.You can also set up monitors to watch for certain metrics. Ao verificar o uso da CPU no painel de portal do Azure, verifique os valores máximos da CPU para que você não perca os valores de pico.When checking the CPU usage on the Azure portal Dashboard, check the MAX values for CPU so you don’t miss the peak values. Se você achar que o aplicativo está consumindo muita CPU e não consegue determinar o motivo, você poderá analisar o aplicativo de nó para descobrir.If you believe your application is consuming too much CPU and you cannot explain why, you can profile your node application to find out.

Criar o perfil do aplicativo de nó no Serviço de Aplicativo do Azure com o V8-ProfilerProfiling your node application on Azure App Service with V8-Profiler

Por exemplo, digamos que você tenha um aplicativo hello world para o qual deseje criar o perfil, conforme mostrado abaixo:For example, let's say you have a hello world app that you want to profile as follows:

const http = require('http');
function WriteConsoleLog() {
    for(let i=0;i<99999;++i) {
        console.log('hello world');
    }
}

function HandleRequest() {
    WriteConsoleLog();
}

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    HandleRequest();
    res.end('Hello world!');
}).listen(process.env.PORT);

Vá para o site do Console de Depuração https://yoursite.scm.azurewebsites.net/DebugConsoleGo to the Debug Console site https://yoursite.scm.azurewebsites.net/DebugConsole

Vá para o diretório site/wwwroot.Go into your site/wwwroot directory. Você verá um prompt de comando conforme mostrado no exemplo a seguir:You see a command prompt as shown in the following example:

Captura de tela que mostra o diretório site/wwwroot e o prompt de comando.

Execute o comando npm install v8-profiler.Run the command npm install v8-profiler.

Esse comando instala o v8-profiler no diretório de módulos de nó _e todas as dependências.This command installs the v8-profiler under node_modules directory and all of its dependencies. Agora, edite o server.js para criar o perfil do aplicativo.Now, edit your server.js to profile your application.

const http = require('http');
const profiler = require('v8-profiler');
const fs = require('fs');

function WriteConsoleLog() {
    for(let i=0;i<99999;++i) {
        console.log('hello world');
    }
}

function HandleRequest() {
    profiler.startProfiling('HandleRequest');
    WriteConsoleLog();
    fs.writeFileSync('profile.cpuprofile', JSON.stringify(profiler.stopProfiling('HandleRequest')));
}

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    HandleRequest();
    res.end('Hello world!');
}).listen(process.env.PORT);

As alterações anteriores criarão o perfil da função WriteConsoleLog e gravarão a saída do perfil no arquivo 'profile.cpuprofile' no site wwwroot.The preceding code profiles the WriteConsoleLog function and then writes the profile output to the ‘profile.cpuprofile’ file under your site wwwroot. Envie uma solicitação para o aplicativo.Send a request to your application. Você verá um arquivo 'profile.cpuprofile' criado no site wwwroot.You see a ‘profile.cpuprofile’ file created under your site wwwroot.

Captura de tela que mostra o arquivo Profile. cpuprofile.

Fazer o download do arquivo e abri-lo com as ferramentas do Chrome F12.Download this file and open it with Chrome F12 Tools. Pressione F12 no Chrome e escolha a guia perfis . Escolha o botão carregar .Press F12 on Chrome, then choose the Profiles tab. Choose the Load button. Selecione o arquivo profile.cpuprofile que você baixou.Select your profile.cpuprofile file that you downloaded. Clique no perfil que você acabou de carregar.Click on the profile you just loaded.

Captura de tela que mostra o arquivo Profile. cpuprofile que você carregou.

Você verá que 95% do tempo foi consumido pela função WriteConsoleLog.You can see that 95% of the time was consumed by the WriteConsoleLog function. A saída também mostra os números de linha e os arquivos de origem exatos que causaram o problema.The output also shows you the exact line numbers and source files that caused the issue.

Meu aplicativo de nó está consumindo muita memóriaMy node application is consuming too much memory

Se o seu aplicativo estiver consumindo muita memória, você verá um aviso do Serviço de Aplicativo do Azure em seu portal sobre o alto consumo de memória.If your application is consuming too much memory, you see a notice from Azure App Service on your portal about high memory consumption. Você pode configurar monitores para observar determinadas métricas.You can set up monitors to watch for certain metrics. Ao verificar o uso de memória no painel portal do Azure, certifique-se de verificar os valores máximos de memória para que você não perca os valores de pico.When checking the memory usage on the Azure portal Dashboard, be sure to check the MAX values for memory so you don’t miss the peak values.

Detecção de vazamento e Comparação de Heap para node.jsLeak detection and Heap Diff for node.js

Você pode usar node-memwatch para ajudá-lo a identificar perdas de memória.You could use node-memwatch to help you identify memory leaks. Você pode instalar memwatch como v8-profiler e editar o código para capturar e comparar heaps para identificar os vazamentos de memória no aplicativo.You can install memwatch just like v8-profiler and edit your code to capture and diff heaps to identify the memory leaks in your application.

Os arquivos node.exe estão sendo encerrados aleatoriamenteMy node.exe’s are getting killed randomly

Há algumas razões pelas quais o node.exe é desligado aleatoriamente:There are a few reasons why node.exe is shut down randomly:

  1. Seu aplicativo está lançando exceções não identificadas – confira o arquivo d:\home\LogFiles\Application\logging-errors.txt para obter detalhes sobre a exceção lançada.Your application is throwing uncaught exceptions – Check d:\home\LogFiles\Application\logging-errors.txt file for the details on the exception thrown. Esse arquivo tem o rastreamento de pilha para ajudar a depurar e corrigir o aplicativo.This file has the stack trace to help debug and fix your application.
  2. O aplicativo está consumindo muita memória, o que está afetando outros processos desde o início.Your application is consuming too much memory, which is affecting other processes from getting started. Se a memória total da VM estiver próxima de 100%, os node.exe poderão ser encerrados pelo gerenciador de processos.If the total VM memory is close to 100%, your node.exe’s could be killed by the process manager. O gerenciador de processos encerra alguns processos para permitir que outros processos tenham a oportunidade de realizar algum trabalho.Process manager kills some processes to let other processes get a chance to do some work. Para corrigir esse problema, analise o aplicativo para perda de memória.To fix this issue, profile your application for memory leaks. Se o aplicativo exigir grandes quantidades de memória, dimensione para uma VM maior (o que aumenta a RAM disponível para a VM).If your application requires large amounts of memory, scale up to a larger VM (which increases the RAM available to the VM).

O aplicativo de nó não é iniciadoMy node application does not start

Se o aplicativo estiver retornando Erros 500 na inicialização, pode haver alguns motivos:If your application is returning 500 Errors when it starts, there could be a few reasons:

  1. Node.exe não está presente no local correto.Node.exe is not present at the correct location. Verifique a configuração nodeProcessCommandLine.Check nodeProcessCommandLine setting.
  2. O arquivo de script principal não está presente no local correto.Main script file is not present at the correct location. Verifique web.config e confira se o nome do arquivo de script principal na seção de manipuladores corresponde ao arquivo de script principal.Check web.config and make sure the name of the main script file in the handlers section matches the main script file.
  3. A configuração de Web.config não está correta. Verifique os nomes/valores das configurações.Web.config configuration is not correct – check the settings names/values.
  4. Inicialização a Frio – o aplicativo está demorando muito para ser inicializado.Cold Start – Your application is taking too long to start. Se o aplicativo demorar mais do que (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay)/1000 segundos, iisnode retornará um erro 500.If your application takes longer than (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000 seconds, iisnode returns a 500 error. Aumente os valores dessas configurações para corresponder à hora de início do aplicativo e impedir que iisnode atinja o tempo limite e retorne o erro 500.Increase the values of these settings to match your application start time to prevent iisnode from timing out and returning the 500 error.

Meu aplicativo de nó falhouMy node application crashed

O aplicativo está lançando exceções não identificadas – Verifique o arquivo d:\\home\\LogFiles\\Application\\logging-errors.txt para obter detalhes sobre a exceção gerada.Your application is throwing uncaught exceptions – Check d:\\home\\LogFiles\\Application\\logging-errors.txt file for the details on the exception thrown. Esse arquivo tem o rastreamento de pilha para ajudar a diagnosticar e corrigir o aplicativo.This file has the stack trace to help diagnose and fix your application.

O aplicativo de nó demora muito para ser inicializado (Inicialização a Frio)My node application takes too much time to start (Cold Start)

A causa comum para os tempos de início longos do aplicativo é um número alto de arquivos nos módulos do nó_.The common cause for long application start times is a high number of files in the node_modules. O aplicativo tenta carregar a maioria desses arquivos ao iniciar.The application tries to load most of these files when starting. Por padrão, como os arquivos estão armazenados no compartilhamento de rede no Serviço de Aplicativo do Azure, o carregamento de muitos arquivos pode demorar algum tempo.By default, since your files are stored on the network share on Azure App Service, loading many files can take time. Algumas soluções para tornar esse processo mais rápido são:Some solutions to make this process faster are:

  1. Tente carregar lentamente os node_modules e não carregue todos os módulos na inicialização do aplicativo.Try to lazy load your node_modules and not load all of the modules at application start. Para módulos de carregamento Lento, a chamada para exigir (‘módulo’) deve ser feita quando você realmente precisar do módulo dentro da função antes da primeira execução do código do módulo.To Lazy load modules, the call to require(‘module’) should be made when you actually need the module within the function before the first execution of module code.
  2. O Serviço de Aplicativo do Azure oferece um recurso chamado cache local.Azure App Service offers a feature called local cache. Esse recurso copia o conteúdo do compartilhamento de rede para o disco local na VM.This feature copies your content from the network share to the local disk on the VM. Como os arquivos são locais, o tempo de carregamento do nó_módulos é muito mais rápido.Since the files are local, the load time of node_modules is much faster.

Substatus e status http de IISNODEIISNODE http status and substatus

O cnodeconstants arquivo de origem lista todas as combinações possíveis de status/substatus que o iisnode pode retornar devido a um erro.The cnodeconstants source file lists all of the possible status/substatus combinations iisnode can return due to an error.

Habilite FREB para que o aplicativo veja o código de erro win32 (habilite FREB apenas em sites que não sejam produção, por motivos de desempenho).Enable FREB for your application to see the win32 error code (be sure you enable FREB only on non-production sites for performance reasons).

Status HttpHttp Status Substatus HttpHttp Substatus Razão Possível?Possible Reason?
500500 10001000 Houve algum problema ao expedir a solicitação para IISNODE – Verifique se node.exe foi iniciado.There was some issue dispatching the request to IISNODE – Check if node.exe was started. Node.exe pode ter falhado ao inicializar.Node.exe could have crashed when starting. Verifique se há erros na configuração de web.config.Check your web.config configuration for errors.
500500 10011001 - Win32Error 0x2 - o aplicativo não está respondendo à URL.- Win32Error 0x2 - App is not responding to the URL. Verifique as regras de regravação de URL ou se o aplicativo expresso tem as rotas corretas definidas.Check the URL rewrite rules or check if your express app has the correct routes defined. -Win32Error 0x6d – o pipe nomeado está ocupado – Node.exe não está aceitando solicitações porque o pipe está ocupado.- Win32Error 0x6d – named pipe is busy – Node.exe is not accepting requests because the pipe is busy. Verifique o alto uso da cpu.Check high cpu usage. - Outros erros – verifique se node.exe falhou.- Other errors – check if node.exe crashed.
500500 10021002 Falha de node.exe – confira d:\home\LogFiles\logging-errors.txt para o rastreamento de pilha.Node.exe crashed – check d:\home\LogFiles\logging-errors.txt for stack trace.
500500 10031003 Problema na configuração de pipe – A configuração de pipe nomeado está incorreta.Pipe configuration Issue – The named pipe configuration is incorrect.
500500 1004-10181004-1018 Erro ao enviar a solicitação ou ao processar a resposta de/para node.exe.There was some error while sending the request or processing the response to/from node.exe. Verifique se node.exe falhou.Check if node.exe crashed. verifique d:\home\LogFiles\logging-errors.txt para rastrear a pilha.check d:\home\LogFiles\logging-errors.txt for stack trace.
503503 10001000 Não há memória suficiente para alocar mais conexões de pipe nomeado.Not enough memory to allocate more named pipe connections. Verifique por que o aplicativo está consumindo tanta memória.Check why your app is consuming so much memory. Verifique o valor da configuração maxConcurrentRequestsPerProcess.Check maxConcurrentRequestsPerProcess setting value. Se não estiver definido como infinito e houver muitas solicitações, aumente o valor para evitar o erro.If it's not infinite and you have many requests, increase this value to prevent this error.
503503 10011001 Não foi possível expedir a solicitação para node.exe porque o aplicativo está sendo reciclado.Request could not be dispatched to node.exe because the application is recycling. Depois que o aplicativo for reciclado, as solicitações deverão ser atendidas normalmente.After the application has recycled, requests should be served normally.
503503 10021002 Verifique o código de erro win32 para obter o motivo real – não foi possível distribuir a solicitação para um node.exe.Check win32 error code for actual reason – Request could not be dispatched to a node.exe.
503503 10031003 O pipe nomeado é muito Ocupado – Verifique se o node.exe está consumindo CPU excessivaNamed pipe is too Busy – Verify if node.exe is consuming excessive CPU

NODE.exe tem uma configuração chamada NODE_PENDING_PIPE_INSTANCES.NODE.exe has a setting called NODE_PENDING_PIPE_INSTANCES. Em Serviço de Aplicativo do Azure, esse valor é definido como 5000.On Azure App Service, this value is set to 5000. Isso significa que node.exe pode aceitar 5.000 solicitações por vez no pipe nomeado.Meaning that node.exe can accept 5000 requests at a time on the named pipe. Esse valor deve ser suficiente para a maioria dos aplicativos de nó em execução no Serviço de Aplicativo do Azure.This value should be good enough for most node applications running on Azure App Service. Você não deve ver 503.1003 no Serviço de Aplicativo do Azure devido ao alto valor para NODE_PENDING_PIPE_INSTANCESYou should not see 503.1003 on Azure App Service because of the high value for the NODE_PENDING_PIPE_INSTANCES

Mais recursosMore resources

Siga estes links para saber mais sobre aplicativos do node.js no Serviço de Aplicativo do Azure.Follow these links to learn more about node.js applications on Azure App Service.