Procedure consigliate e risoluzione dei problemi per le applicazioni Node nel Servizio app di Azure per WindowsBest practices and troubleshooting guide for node applications on Azure App Service Windows

In questo articolo vengono illustrate le procedure consigliate e i passaggi per la risoluzione dei problemi per le applicazioni Windows Node.js in esecuzione nel servizio app Azure (con iisnode).In this article, you learn best practices and troubleshooting steps for Windows Node.js applications running on Azure App Service (with iisnode).

Avviso

Prestare attenzione durante l'uso delle procedure di risoluzione dei problemi nel sito di produzione.Use caution when using troubleshooting steps on your production site. È consigliabile risolvere i problemi dell'app in una configurazione non di produzione, ad esempio nello slot di staging, e dopo la risoluzione del problema scambiare lo slot di staging con lo slot di produzione.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.

Configurazione IISNODEIISNODE configuration

Questo file di schema mostra tutte le impostazioni che è possibile configurare per iisnode.This schema file shows all the settings that you can configure for iisnode. Ecco alcune impostazioni utili per l'applicazione:Some of the settings that are useful for your application:

nodeProcessCountPerApplicationnodeProcessCountPerApplication

Questa impostazione controlla il numero di processi del nodo avviati per ogni applicazione IIS.This setting controls the number of node processes that are launched per IIS application. Il valore predefinito è 1.The default value is 1. È possibile avviare tanti file node.exe quanto è il numero di vCPU della macchina virtuale modificando il valore in 0.You can launch as many node.exes as your VM vCPU count by changing the value to 0. Il valore consigliato è 0 per la maggior parte delle applicazioni, per consentire di usare tutte le CPU virtuali disponibili nel computer.The recommended value is 0 for most applications so you can use all of the vCPUs on your machine. Node.exe è a thread singolo e pertanto usa un massimo di una CPU virtuale.Node.exe is single-threaded so one node.exe consumes a maximum of 1 vCPU. Per ottenere prestazioni ottimali dall'applicazione Node, usare tutte le CPU virtuali.To get maximum performance out of your node application, you want to use all vCPUs.

nodeProcessCommandLinenodeProcessCommandLine

Questa impostazione controlla il percorso del file node.exe.This setting controls the path to the node.exe. È possibile impostare questo valore in modo che faccia riferimento alla versione specifica del file node.exe.You can set this value to point to your node.exe version.

maxConcurrentRequestsPerProcessmaxConcurrentRequestsPerProcess

Questa impostazione controlla il numero massimo di richieste concorrenti inviate da iisnode a ogni node.exe.This setting controls the maximum number of concurrent requests sent by iisnode to each node.exe. In Servizio app di Azure il valore predefinito è Infinito.On Azure App Service, the default value is Infinite. È possibile configurare il valore in base al numero di richieste ricevute dall'applicazione e dalla velocità in cui l'applicazione elabora ogni richiesta.You can configure the value depending on how many requests your application receives and how fast your application processes each request.

maxNamedPipeConnectionRetrymaxNamedPipeConnectionRetry

Questa impostazione controlla il numero massimo di tentativi di connessione da parte di iisnode alla named pipe per inviare la richiesta a 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. Questa impostazione, insieme a namedPipeConnectionRetryDelay, determina il timeout totale di ogni richiesta in iisnode.This setting in combination with namedPipeConnectionRetryDelay determines the total timeout of each request within iisnode. Il valore predefinito è 200 in Servizio app di Azure.The default value is 200 on Azure App Service. Timeout totale in secondi = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000Total Timeout in seconds = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000

namedPipeConnectionRetryDelaynamedPipeConnectionRetryDelay

Questa impostazione controlla la quantità di tempo (in ms) di attesa da parte di iisnode prima di ripetere il tentativo di invio di richieste a node.exe tramite la named pipe.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. Il valore predefinito è 250 ms.The default value is 250 ms. Timeout totale in secondi = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000Total Timeout in seconds = (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000

Per impostazione predefinita, il timeout totale in iisnode in Servizio app di Azure è 200 * 250 ms = 50 secondi.By default, the total timeout in iisnode on Azure App Service is 200 * 250 ms = 50 seconds.

logDirectorylogDirectory

Questa impostazione controlla la directory in cui iisnode registra stdout/stderr.This setting controls the directory where iisnode logs stdout/stderr. Il valore predefinito è iisnode, ovvero un valore relativo alla directory di script principale (directory in cui si trova server.js)The default value is iisnode, which is relative to the main script directory (directory where main server.js is present)

debuggerExtensionDlldebuggerExtensionDll

Questa impostazione controlla la versione di node-inspector usata da iisnode durante il debug dell'applicazione Node.This setting controls what version of node-inspector iisnode uses when debugging your node application. iisnode-inspector-0.7.3.dll e iisnode-inspector.dll sono attualmente gli unici due valori validi per questa impostazione.Currently, iisnode-inspector-0.7.3.dll and iisnode-inspector.dll are the only two valid values for this setting. Il valore predefinito è iisnode-inspector-0.7.3.dll.The default value is iisnode-inspector-0.7.3.dll. La versione di iisnode-inspector-0.7.3.dll usa node-inspector-0.7.3 e WebSocket.The iisnode-inspector-0.7.3.dll version uses node-inspector-0.7.3 and uses web sockets. Per usare questa versione, abilitare i WebSocket nell'app Web di Azure.Enable web sockets on your Azure webapp to use this version. Per altre informazioni su come configurare iisnode per usare il nuovo node-inspector, vedere https://ranjithblogs.azurewebsites.net/?p=98.See https://ranjithblogs.azurewebsites.net/?p=98 for more details on how to configure iisnode to use the new node-inspector.

flushResponseflushResponse

Il comportamento predefinito di IIS prevede il buffering di un massimo di 4 MB di dati di risposta prima dello scaricamento oppure fino alla fine della risposta, a seconda di quale si verifica per primo.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. iisnode offre un'impostazione di configurazione per eseguire l'override di questo comportamento: per scaricare un frammento del corpo dell'entità della risposta non appena iisnode lo riceve da node.exe, è necessario impostare l'attributo iisnode/@flushResponse in web.config su '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>

Se si abilita lo scaricamento di ogni frammento del corpo dell'entità della risposta, si verifica un overhead delle prestazioni che riduce la velocità effettiva del sistema di circa il 5% (a partire 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). L'approccio migliore è definire l'ambito di questa impostazione solo per gli endpoint che richiedono lo streaming delle risposte, ad esempio usando l'elemento <location> in web.configThe best to scope this setting only to endpoints that require response streaming (for example, using the <location> element in the web.config)

Per lo streaming di applicazioni è inoltre necessario impostare il valore responseBufferLimit del gestore di iisnode su 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

Elenco di file con valori separati da punti e virgola che vengono controllati per rilevare le modifiche.A semi-colon separated list of files that are watched for changes. Qualsiasi modifica apportata a un file provoca il riciclo da parte dell'applicazione.Any change to a file causes the application to recycle. Ogni voce è costituita da un nome di directory facoltativo e da un nome di file obbligatorio, relativi alla directory in cui si trova il punto di ingresso principale dell'applicazione.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. I caratteri jolly sono consentiti solo nella parte relativa al nome di file.Wild cards are allowed in the file name portion only. Il valore predefinito è *.js;iisnode.ymlThe default value is *.js;iisnode.yml

recycleSignalEnabledrecycleSignalEnabled

Il valore predefinito è false.The default value is false. Se questa funzionalità è abilitata, l'applicazione Node si può connettere a una named pipe (variabile di ambiente IISNODE_CONTROL_PIPE) e può inviare un messaggio di "riciclo".If enabled, your node application can connect to a named pipe (environment variable IISNODE_CONTROL_PIPE) and send a “recycle” message. In questo modo w3wp verrà riciclato correttamente.This causes the w3wp to recycle gracefully.

idlePageOutTimePeriodidlePageOutTimePeriod

Il valore predefinito è 0, ovvero questa funzionalità è disabilitata.The default value is 0, which means this feature is disabled. Se si specifica un valore maggiore di 0, iisnode eseguirà il paging di tutti i rispettivi processi figlio ogni 'idlePageOutTimePeriod' in millisecondi.When set to some value greater than 0, iisnode will page out all its child processes every ‘idlePageOutTimePeriod’ in milliseconds. Per informazioni sul paging, vedere questa documentazione.See documentation to understand what page out means. Questa impostazione è utile per le applicazioni che usano una quantità elevata di memoria e vogliono eseguire occasionalmente il paging della memoria sul disco per liberare 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.

Avviso

Prestare attenzione quando si abilitano le impostazioni di configurazione seguenti nelle applicazioni di produzione.Use caution when enabling the following configuration settings on production applications. È consigliabile non abilitarle nelle applicazioni di produzione live.The recommendation is to not enable them on live production applications.

debugHeaderEnableddebugHeaderEnabled

Il valore predefinito è false.The default value is false. Se è True, iisnode aggiunge un'intestazione di risposta HTTP iisnode-debug a ogni risposta HTTP inviata. Il valore di intestazione iisnode-debug è un 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. Le singole informazioni di diagnostica possono essere ottenute esaminando il frammento di URL, ma è disponibile una visualizzazione tramite l'apertura dell'URL in un browser.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

Questa impostazione controlla la registrazione di stdout e stderr da parte di iisnode.This setting controls the logging of stdout and stderr by iisnode. Iisnode acquisisce i valori di stdout/stderr dai processi di nodo avviati e li scriverà nella directory specificata nell'impostazione 'logDirectory'.Iisnode captures stdout/stderr from node processes it launches and writes to the directory specified in the ‘logDirectory’ setting. Se si abilita questa impostazione, l'applicazione scrive log nel file system e ciò potrebbe provocare problemi di prestazioni, in base alla quantità di registrazione eseguita dall'applicazione.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

Il valore predefinito è false.The default value is false. Se questo valore è impostato su True, iisnode visualizza il codice di stato HTTP e il codice errore Win32 nel browser.When set to true, iisnode displays the HTTP status code and Win32 error code on your browser. Il codice win32 risulta utile per il debug di determinati tipi di problemi.The win32 code is helpful in debugging certain types of issues.

debuggingEnabled (non abilitare questa impostazione nel sito di produzione live)debuggingEnabled (do not enable on live production site)

Questa impostazione controlla la funzionalità di debug.This setting controls debugging feature. Iisnode è integrato con node-inspector.Iisnode is integrated with node-inspector. Abilitando questa impostazione, si abilita il debug dell'applicazione Node.By enabling this setting, you enable debugging of your node application. Dopo l'abilitazione di questa impostazione, iisnode crea i file node-inspector necessari nella directory "debuggerVirtualDir" alla prima richiesta di debug per l'applicazione Node.Upon enabling this setting, iisnode creates node-inspector files in ‘debuggerVirtualDir’ directory on the first debug request to your node application. È possibile caricare node-inspector inviando una richiesta a http://yoursite/server.js/debug.You can load the node-inspector by sending a request to http://yoursite/server.js/debug. È possibile controllare il segmento dell'URL di debug con l'impostazione 'debuggerPathSegment'.You can control the debug URL segment with ‘debuggerPathSegment’ setting. Per impostazione predefinita, debuggerPathSegment='debug'.By default, debuggerPathSegment=’debug’. È possibile impostare debuggerPathSegment su un GUID, ad esempio, in modo che non possa essere individuato facilmente da altri utenti.You can set debuggerPathSegment to a GUID, for example, so that it is more difficult to be discovered by others.

Per altre informazioni sul debug, vedere Debug node.js applications on Windows (Eseguire il debug di applicazioni Node.js in Windows).Read Debug node.js applications on Windows for more details on debugging.

Scenari e indicazioni/risoluzione dei problemiScenarios and recommendations/troubleshooting

L'applicazione Node effettua un numero eccessivo di chiamate in uscitaMy node application is making excessive outbound calls

Il funzionamento normale di molte applicazioni prevede l'esecuzione di connessioni in uscita.Many applications would want to make outbound connections as part of their regular operation. Quando si riceve una richiesta, ad esempio, l'app Node deve contattare un'API REST in una posizione diversa e ottenere informazioni per elaborare la richiesta.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. È consigliabile usare un agente keep-alive durante l'esecuzione di chiamate HTTP o HTTPS.You would want to use a keep alive agent when making http or https calls. È possibile usare il modulo agentkeepalive come agente keep-alive durante le chiamate in uscita.You could use the agentkeepalive module as your keep alive agent when making these outbound calls.

Il modulo agentkeepalive assicura il riutilizzo dei socket nella macchina virtuale in App Web di Azure.The agentkeepalive module ensures that sockets are reused on your Azure webapp VM. La creazione di un nuovo socket a ogni richiesta in uscita comporta un ulteriore sovraccarico per l'applicazione.Creating a new socket on each outbound request adds overhead to your application. Facendo in modo che l'applicazione riutilizzi i socket per le richieste in uscita, è possibile evitare che l'applicazione superi il valore di maxSockets allocato per ogni macchina virtuale.Having your application reuse sockets for outbound requests ensures that your application doesn't exceed the maxSockets that are allocated per VM. Il suggerimento sul servizio app Azure consiste nell'impostare il valore maxSockets per agentkeepalive su un totale di (4 istanze di node.exe * 32 maxSockets/istanza) 128 socket per macchina virtuale.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.

Esempio di configurazione di per agentkeepalive :Example agentKeepALive configuration:

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

Importante

Questo esempio presuppone che siano presenti quattro file node.exe in esecuzione nella VM.This example assumes you have 4 node.exe running on your VM. Se nella macchina virtuale è presente un numero diverso di node.exe in esecuzione, è necessario modificare di conseguenza l'impostazione maxSockets.If you have a different number of node.exe running on the VM, you must modify the maxSockets setting accordingly.

L'applicazione Node usa una quantità eccessiva di CPUMy node application is consuming too much CPU

Si potrebbe ricevere un'indicazione da Servizio app di Azure nel portale riguardo all'utilizzo elevato di CPU.You may receive a recommendation from Azure App Service on your portal about high cpu consumption. È anche possibile configurare monitoraggi per il controllo di determinate metriche.You can also set up monitors to watch for certain metrics. Quando si controlla l'utilizzo della CPU nel Dashboard portale di Azure, controllare i valori massimi per CPU, in modo da non perdere i valori di picco.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 si ritiene che l'applicazione usi una quantità eccessiva di CPU senza una spiegazione plausibile, è possibile profilare l'applicazione Node per individuare il motivo.If you believe your application is consuming too much CPU and you cannot explain why, you can profile your node application to find out.

Profilatura dell'applicazione Node in Servizio app di Azure con V8-ProfilerProfiling your node application on Azure App Service with V8-Profiler

Si supponga, ad esempio, che sia disponibile un'app hello world da profilare come illustrato di seguito: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);

Passare al sito della console di debug all'indirizzo https://yoursite.scm.azurewebsites.net/DebugConsoleGo to the Debug Console site https://yoursite.scm.azurewebsites.net/DebugConsole

Passare alla directory site/wwwroot.Go into your site/wwwroot directory. Verrà visualizzato un prompt dei comandi, come mostrato nell'esempio seguente:You see a command prompt as shown in the following example:

Screenshot che mostra la directory site/wwwroot e il prompt dei comandi.

Eseguire il comando npm install v8-profiler.Run the command npm install v8-profiler.

Questo comando installa v8-profiler nella directory _modules, insieme a tutte le dipendenze.This command installs the v8-profiler under node_modules directory and all of its dependencies. Modificare il file server.js per profilare l'applicazione.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);

Il codice precedente eseguirà la profilatura della funzione WriteConsoleLog e quindi scriverà l'output della profilatura nel file 'profile.cpuprofile' nella directory wwwroot del sito.The preceding code profiles the WriteConsoleLog function and then writes the profile output to the ‘profile.cpuprofile’ file under your site wwwroot. Inviare una richiesta all'applicazione.Send a request to your application. Verrà visualizzato un file 'profile.cpuprofile' creato nella directory wwwroot del sito.You see a ‘profile.cpuprofile’ file created under your site wwwroot.

Screenshot che mostra il file profile. cpuprofile.

Scaricare questo file e aprirlo con gli strumenti F12 di Chrome.Download this file and open it with Chrome F12 Tools. Premere F12 in Chrome, quindi scegliere la scheda profili . Scegliere il pulsante carica .Press F12 on Chrome, then choose the Profiles tab. Choose the Load button. Selezionare il file profile.cpuprofile scaricato.Select your profile.cpuprofile file that you downloaded. Fare clic sul profilo appena caricato.Click on the profile you just loaded.

Screenshot che mostra il file profile. cpuprofile caricato.

Come si può notare, il 95% del tempo è stato usato dalla funzione WriteConsoleLog.You can see that 95% of the time was consumed by the WriteConsoleLog function. L'output mostra anche l'esatto numero di righe e di file di origine che hanno causato il problema.The output also shows you the exact line numbers and source files that caused the issue.

L'applicazione Node usa una quantità eccessiva di memoriaMy node application is consuming too much memory

Se l'applicazione usa una quantità eccessiva di memoria, nel portale viene visualizzato un avviso di Servizio app di Azure indicante questa situazione.If your application is consuming too much memory, you see a notice from Azure App Service on your portal about high memory consumption. È possibile configurare monitoraggi per il controllo di determinate metriche.You can set up monitors to watch for certain metrics. Quando si verifica l'utilizzo della memoria nel Dashboard portale di Azure, assicurarsi di controllare i valori massimi per la memoria, in modo da non perdere i valori di picco.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.

Rilevamento della perdita di risorse e delle differenze tra heap per Node.jsLeak detection and Heap Diff for node.js

È possibile usare node-memwatch per semplificare l'identificazione delle perdite di memoria.You could use node-memwatch to help you identify memory leaks. È possibile installare memwatch con la stessa procedura usata per v8-profiler e modificare il codice per acquisire gli heap e rilevarne le differenze in modo da identificare le perdite di memoria nell'applicazione.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.

I file node.exe vengono terminati in modo casualeMy node.exe’s are getting killed randomly

Esistono diversi motivi per cui node.exe è stato arrestato in modo casuale:There are a few reasons why node.exe is shut down randomly:

  1. L'applicazione genera eccezioni non rilevate. Cercare nel file d:\home\LogFiles\Application\logging-errors.txt i dettagli nell'eccezione generata.Your application is throwing uncaught exceptions – Check d:\home\LogFiles\Application\logging-errors.txt file for the details on the exception thrown. Questo file include l'analisi dello stack per semplificare il debug e la correzione dell'applicazione.This file has the stack trace to help debug and fix your application.
  2. L'applicazione usa una quantità eccessiva di memoria, impedendo l'avvio di altri processi.Your application is consuming too much memory, which is affecting other processes from getting started. Se la memoria totale della macchina virtuale si avvicina al 100%, è possibile che il file node.exe venga terminato dalla gestione dei processi.If the total VM memory is close to 100%, your node.exe’s could be killed by the process manager. La gestione dei processi termina alcuni processi per offrire ad altri processi la possibilità di eseguire alcune attività.Process manager kills some processes to let other processes get a chance to do some work. Per risolvere questo problema, profilare l'applicazione per individuare le perdite di memoria.To fix this issue, profile your application for memory leaks. Se l'applicazione richiede grandi quantità di memoria, applicare la scalabilità verticale a una macchina virtuale di dimensioni maggiori (che aumenta la quantità di RAM disponibile per la macchina virtuale).If your application requires large amounts of memory, scale up to a larger VM (which increases the RAM available to the VM).

Non è possibile avviare l'applicazione NodeMy node application does not start

Se l'applicazione restituisce errori di tipo 500 all'avvio, è possibile che si siano verificati i problemi seguenti:If your application is returning 500 Errors when it starts, there could be a few reasons:

  1. Node.exe non è presente nella posizione corretta.Node.exe is not present at the correct location. Verificare l'impostazione nodeProcessCommandLine.Check nodeProcessCommandLine setting.
  2. Il file di script principale non è presente nella posizione corretta.Main script file is not present at the correct location. Controllare il file web.config e assicurarsi che il nome del file di script principale nella sezione dei gestori corrisponda al file di script principale.Check web.config and make sure the name of the main script file in the handlers section matches the main script file.
  3. La configurazione di Web.config non è corretta. Controllare i nomi/valori delle impostazioni.Web.config configuration is not correct – check the settings names/values.
  4. Avvio a freddo: l'avvio dell'applicazione richiede troppo tempo.Cold Start – Your application is taking too long to start. Se l'avvio dell'applicazione richiede più di (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000 secondi, iisnode restituisce un errore di tipo 500.If your application takes longer than (maxNamedPipeConnectionRetry * namedPipeConnectionRetryDelay) / 1000 seconds, iisnode returns a 500 error. Incrementare i valori di queste impostazioni, in modo che corrispondano al tempo di avvio dell'applicazione, per impedire il timeout di iisnode e la restituzione dell'errore di tipo 500.Increase the values of these settings to match your application start time to prevent iisnode from timing out and returning the 500 error.

Si è verificato l'arresto anomalo dell'applicazione NodeMy node application crashed

L'applicazione genera eccezioni non rilevate. Controllare il file d:\\home\\LogFiles\\Application\\logging-errors.txt per informazioni sull'eccezione generata.Your application is throwing uncaught exceptions – Check d:\\home\\LogFiles\\Application\\logging-errors.txt file for the details on the exception thrown. Questo file include l'analisi dello stack per semplificare la diagnosi e la correzione dell'applicazione.This file has the stack trace to help diagnose and fix your application.

L'avvio dell'applicazione Node richiede troppo tempo (avvio a freddo)My node application takes too much time to start (Cold Start)

Tempi prolungati di avvio dell'applicazione sono dovuti a un numero elevato di file nel nodo _modules.The common cause for long application start times is a high number of files in the node_modules. L'applicazione tenta di caricare la maggior parte di questi file all'avvio.The application tries to load most of these files when starting. Per impostazione predefinita, poiché i file sono archiviati nella condivisione di rete in Servizio app di Azure, il caricamento di un numero eccessivo di file può richiedere tempo.By default, since your files are stored on the network share on Azure App Service, loading many files can take time. Ecco alcune soluzione per velocizzare questo processo:Some solutions to make this process faster are:

  1. Provare a eseguire il caricamento lazy di node_modules e non caricare tutti i moduli all'avvio dell'applicazione.Try to lazy load your node_modules and not load all of the modules at application start. Per i moduli di caricamento lazy, la chiamata a require('module') deve essere effettuata quando è effettivamente necessario che il modulo sia incluso nella funzione prima della prima esecuzione del codice del modulo.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. Servizio app di Azure offre una funzionalità definita cache locale.Azure App Service offers a feature called local cache. Questa funzionalità copia il contenuto dalla condivisione di rete nel disco locale sulla macchina virtuale.This feature copies your content from the network share to the local disk on the VM. Poiché i file sono locali, il tempo di caricamento di node_modules risulta molto più veloce.Since the files are local, the load time of node_modules is much faster.

Stato e stato secondario HTTP di IISNODEIISNODE http status and substatus

Il file di originecnodeconstants elenca tutte le possibili combinazioni di stato/stato secondario che possono essere restituite da iisnode a causa di un errore.The cnodeconstants source file lists all of the possible status/substatus combinations iisnode can return due to an error.

Abilitare FREB per l'applicazione per visualizzare il codice errore win32. Assicurarsi di abilitare FREB solo in siti non di produzione, per motivi di prestazioni.Enable FREB for your application to see the win32 error code (be sure you enable FREB only on non-production sites for performance reasons).

Stato HTTPHttp Status Stato secondario HTTPHttp Substatus Possibile motivoPossible Reason?
500500 10001000 Si è verificato un problema durante l'invio della richiesta a IISNODE. Verificare se node.exe è stato avviato.There was some issue dispatching the request to IISNODE – Check if node.exe was started. È possibile che si sia verificato l'arresto anomalo di Node.exe all'avvio.Node.exe could have crashed when starting. Cercare eventuali errori nella configurazione del file web.config.Check your web.config configuration for errors.
500500 10011001 - Win32Error 0x2: l'app non risponde all'URL.- Win32Error 0x2 - App is not responding to the URL. Controllare le regole di riscrittura dell'URL o verificare se sono state definite le route corrette per l'app Express.Check the URL rewrite rules or check if your express app has the correct routes defined. - Win32Error 0x6d: la named pipe è occupata. Node.exe non accetta le richieste perché la pipe è occupata.- Win32Error 0x6d – named pipe is busy – Node.exe is not accepting requests because the pipe is busy. Controllare se l'utilizzo della CPU è elevato.Check high cpu usage. - Altri errori: controllare se si è verificato l'arresto anomalo di node.exe.- Other errors – check if node.exe crashed.
500500 10021002 Si è verificato l'arresto anomalo di Node.exe: verificare se nel file d:\home\LogFiles\logging-errors.txt è disponibile l'analisi dello stack.Node.exe crashed – check d:\home\LogFiles\logging-errors.txt for stack trace.
500500 10031003 Problema di configurazione della pipe: la configurazione della named pipe non è corretta.Pipe configuration Issue – The named pipe configuration is incorrect.
500500 1004-10181004-1018 Si è verificato un errore durante l'invio della richiesta o l'elaborazione della risposta verso/da node.exe.There was some error while sending the request or processing the response to/from node.exe. Controllare se si è verificato l'arresto anomalo di node.exe.Check if node.exe crashed. Verificare se nel file d:\home\LogFiles\logging-errors.txt è disponibile l'analisi dello stack.check d:\home\LogFiles\logging-errors.txt for stack trace.
503503 10001000 La memoria non è sufficiente per allocare altre connessioni a named pipe.Not enough memory to allocate more named pipe connections. Verificare i motivi per cui l'app utilizza una quantità così elevata di memoria.Check why your app is consuming so much memory. Controllare il valore dell'impostazione maxConcurrentRequestsPerProcess.Check maxConcurrentRequestsPerProcess setting value. Se non è impostata su Infinite e il numero di richieste è elevato, incrementare il valore per evitare questo errore.If it's not infinite and you have many requests, increase this value to prevent this error.
503503 10011001 Non è stato possibile inviare la richiesta a node.exe perché l'applicazione è in fase di riciclo.Request could not be dispatched to node.exe because the application is recycling. Dopo il riciclo dell'applicazione, le richieste dovrebbero essere gestite normalmente.After the application has recycled, requests should be served normally.
503503 10021002 Cercare il motivo effettivo nel codice errore win32. Non è stato possibile inviare la richiesta a node.exe.Check win32 error code for actual reason – Request could not be dispatched to a node.exe.
503503 10031003 La named pipe è troppo occupata. Verificare se node.exe sta usando una quantità eccessiva di CPUNamed pipe is too Busy – Verify if node.exe is consuming excessive CPU

NODE.exe include un'impostazione denominata NODE_PENDING_PIPE_INSTANCES.NODE.exe has a setting called NODE_PENDING_PIPE_INSTANCES. In Servizio app di Azure questo valore è impostato su 5000.On Azure App Service, this value is set to 5000. Ossia, node.exe può accettare 5000 richieste alla volta nella named pipe.Meaning that node.exe can accept 5000 requests at a time on the named pipe. Questo valore dovrebbe essere appropriato per la maggior parte delle applicazioni in esecuzione in Servizio app di Azure.This value should be good enough for most node applications running on Azure App Service. L'errore 503.1003 non dovrebbe essere visualizzato in Servizio app di Azure perché è stato impostato un valore elevato per NODE_PENDING_PIPE_INSTANCESYou should not see 503.1003 on Azure App Service because of the high value for the NODE_PENDING_PIPE_INSTANCES

Altre risorseMore resources

Per altre informazioni sulle applicazioni node.js nel servizio app di Azure, selezionare questi collegamenti.Follow these links to learn more about node.js applications on Azure App Service.