Impossibile aggiornare l'istanza di discourse al 15 febbraio 2022

Non posso riavviare ora, ti farò sapere una volta che avrò la possibilità di farlo. Ci vorranno almeno alcuni giorni.

Dovrei essere allarmato? Va bene se devo allocare più risorse

Sì, dovresti essere preoccupato.
Hai pochissimo margine e quasi nessuno spazio per la cache del disco.

Ma prima di allocare più risorse dovresti cercare di scoprire cosa sta causando questo utilizzo di memoria piuttosto straordinario.

1 Mi Piace

Non posso fare molto al momento, sono in movimento. Tornerò nel fine settimana e cercherò sicuramente di capire cosa sta succedendo. Grazie per il suggerimento :+1:

3 Mi Piace

Sembra che sia stato solo un riavvio in ritardo a causare questo. Sono riuscito a riavviare il server e i numeri ora sembrano molto, molto migliori

root@discourse:~# free
               total        used        free      shared  buff/cache   available
Mem:         3927308      977624     2246208       42880      703476     2646836
Swap:        2097148           0     2097148
2 Mi Piace

Potrebbe essere utile, se ti dovessi ritrovare di nuovo in una situazione simile, chiedere a discourse quali processi stanno utilizzando memoria: l’output su
https://example.com/admin/upgrade#/processes
è ordinato in base all’utilizzo della RAM. Questo mostrerà solo i processi in esecuzione con il container. Al prompt dei comandi, potresti usare

ps aux | sort -nr -k 4 | head -22

o comandi simili, per vedere l’utilizzo di tutti i processi, inclusi quelli in tutti i container.

Se un riavvio risolve un problema di esaurimento della memoria, è molto probabile che ci sia qualche processo fuori controllo da qualche parte che aumenterà (forse lentamente) fino a causare problemi.

Modifica: Hmm, vedo che menziono la lettura dei processi in base all’utilizzo della RAM (RSS). Questo può essere utile, ma in questo caso siamo più interessati all’utilizzo della memoria virtuale: dovremmo ordinare per la colonna VSZ, colonna 5, per questo.

2 Mi Piace

Questa istanza di Discourse è stata configurata molti anni fa, quindi forse prima che venisse eseguito il controllo dello swapfile. Ho proceduto ad applicare manualmente quelle righe di codice e ora lo swapfile è stato creato. Grazie.

Per far sì che Docker utilizzi lo swapfile, devo applicare questo? O meglio, qual è lo scopo di questa raccomandazione?

Ho trovato questo che discute di cosa sia vm.overcommit_memory, ma non mi è chiaro perché sia necessaria una tale modifica:

Questo ha a che fare con l’esecuzione di Redis, non con l’aggiornamento di Discourse.

Penso che sia più di questo: lascia che provi a spiegare. La raccomandazione viene da Redis, e Redis la raccomanda perché il forking di un processo richiede molta memoria virtuale, e Redis esegue il fork per eseguire salvataggi in background, e tuttavia la memoria virtuale richiesta non sarà mai necessaria.

Questo è tipico per molte applicazioni Unix: eseguiranno il fork, ma non avranno bisogno di raddoppiare il loro utilizzo di memoria. Poiché è tipico per molte, e poiché questa è un’impostazione del kernel che cambia il comportamento per tutti i processi in tutti i container, potrebbe benissimo convertire un fallimento in un successo quando la memoria virtuale è sotto pressione.

Sulle istanze piccole ed economiche che molti di noi usano, la memoria virtuale è spesso sotto pressione. E specialmente durante gli aggiornamenti o le ricostruzioni.

Quindi, cambiare questa impostazione potrebbe benissimo correlarsi al successo o al fallimento di un aggiornamento, specialmente se c’è stato recentemente un cambiamento che aumenta la domanda di memoria virtuale.

Così com’è, il kernel rifiuterà le allocazioni che non può soddisfare. Con questa modifica, accetterà tali allocazioni, e il fallimento potrebbe essere evitato, o potrebbe accadere più tardi quando l’allocazione diventa utilizzo.

Se il totale della tua RAM e dello swap è abbastanza grande, non avrai mai bisogno di cambiare questa impostazione. Se il tuo totale non è grande, cambiarla potrebbe aiutare.

2 Mi Piace

Il comando free ti dirà quanto swap è configurato e quanto di esso è in uso. Penso che lo troverai in uso non appena avrai eseguito quei comandi.

Serve ad aumentare la quantità di memoria virtuale disponibile. (Cioè, la somma di RAM e swap.) Se esaurisci la RAM, inizi ad avere problemi di prestazioni. Ma se esaurisci la memoria virtuale, i processi non si avvieranno, moriranno o verranno terminati. Diventa brutale.

Coloro che hanno poca RAM e poco disco potrebbero non essere liberi di aggiungere molto swap, ma 2G sembra essere un buon minimo. (Se avessi 16G di RAM potresti non aver bisogno di alcuno swap, ma questa è un’altra storia. È la somma dei due che conta, quando il problema è che le cose falliscono.)

2 Mi Piace

Aha. Penso di averlo capito, ma è un’ottima spiegazione. Ecco perché l’ho impostato su ogni installazione che ho fatto vm che ho creato per i clienti.

Mi chiedo se dovremmo far cambiare a discourse-setup queste impostazioni quando crea lo swap.

1 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.