Perché la mia app ha smesso di funzionare?

Dopo aver distribuito un'applicazione, l'applicazione viene eseguita per un periodo di tempo e poi termina in modo imprevisto.

Determinare se uno dei seguenti casi è true.

  1. Il tuo codice dell'app include un'uscita quando completa il suo ciclo di esecuzione.
  2. Il tuo codice dell'applicazione contiene un errore che sta causando la chiusura imprevista dell'applicazione.
  3. L'immagine da cui sta estraendo la tua applicazione non esiste più perché l'hai eliminata o perché la tua politica di conservazione dell'immagine in IBM Cloud Container Registry ne ha causato l'eliminazione. Ad esempio, la tua applicazione sta aumentando a causa delle richieste in entrata. Tuttavia, lo scale-up non riesce perché l'immagine non esiste più in Container Registry. Un'altra situazione tipica è se la tua applicazione si trova su un nodo di lavoro pianificato per ricevere le correzioni di sicurezza più recenti. Se Code Engine tenta di spostare la tua applicazione in un nodo di lavoro differente e non riesce a trovare l'immagine, lo spostamento non riesce e l'applicazione smette di funzionare.
  4. L'immagine da cui la tua applicazione sta estraendo non esiste più perché mentre l'immagine con la tag fornita esiste, è stata sovrascritta dopo la creazione di una revisione dell'applicazione. L'immagine associata alla tua specifica revisione dell'applicazione utilizza un digest del registro del contenitore univoco e questo digest viene utilizzato per la vita della tua revisione dell'applicazione. Se crei una versione più recente dell'immagine con la stessa tag dell'immagine originale, l'immagine originale viene sovrascritta nel registro del contenitore. Tuttavia, Code Engine non riesce a trovare questa immagine più recente, perché l'immagine più recente ha un digest diverso rispetto al digest per la revisione dell'applicazione. Non è possibile creare nuove istanze dell'applicazione e questo scenario provoca un malfunzionamento dell'applicazione.

Provare le seguenti soluzioni per risolvere il problema.

  1. Le applicazioni Code Engine sono progettate per essere eseguite senza uscire. Se il tuo codice applicazione include un'uscita, considera invece l'esecuzione del codice come lavoro.

  2. Controllare i messaggi che potrebbero aiutare a determinare la causa. Se imposti la registrazione per Code Engine, i tuoi file di log potrebbero contenere messaggi. Per ulteriori informazioni sulla registrazione, vedi Visualizzazione dei log. La tua applicazione deve seguire la metodologia dell'applicazione a 12 fattori. Ad esempio, se la struttura sottostante di Code Engine su cui è in esecuzione la tua applicazione richiede un aggiornamento, viene creata una nuova istanza della tua applicazione sull'infrastruttura aggiornata. Quando la tua nuova istanza dell'applicazione è contrassegnata come Ready, Code Engine instrada il traffico ad essa. La tua vecchia applicazione riceve quindi un messaggio SIGTERM, consentendo il suo arresto in modo sicuro. Se non viene arrestato, Code Engine invia un messaggio SIGKILL e la vecchia istanza dell'applicazione viene eliminata, causando la perdita dei dati.

  3. Ricrea l'immagine in Container Registry, quindi distribuisci un'altra istanza della tua applicazione. Controlla quindi la tua politica di conservazione delle immagini in Container Registry in modo che le immagini utilizzate dalle revisioni attive non vengano eliminate. Se stai utilizzando i template della toolchain per Code Engine, puoi anche aggiungere la logica alla definizione della tua pipeline per eliminare le versioni inutilizzate della tua immagine solo dopo che è stata distribuita una versione funzionante.

  4. Crea una nuova revisione per la tua applicazione aggiornandola. Se un'immagine viene inviata con la stessa tag, devi aggiornare la tua applicazione per creare una nuova revisione che utilizza questa immagine aggiornata.