507 Insufficient Storage: cos’è è come risolverlo

Argomenti trattati: ,
Pubblicato il: 20 Febbraio 2021

L’errore 507 Insufficient Storage indica un errore lato server per cui, tipicamente in ambiente WebDAV, il server non è in grado di completare la richiesta per problemi di memorizzazione (storage). L’errore è tipicamente di difficile risoluzione, deve essere corretto da personale specializzate ed indica una sorta di sovraccarico nel server da parte di più client. Su alcuni hosting questo errore appare in questa forma estesa:

Insufficient storage – The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.there is insufficient storage space left in your storage allocation

Ci sono molte cause legate a questo errore, ed è impossibile sapere a priori cosa fare se prima non si effettua una fase di diagnostica accurata.

Da cosa dipende questo errore?

Una possibilità che fa apparire l’errore 507 Insufficient Storage è ad esempio legata all’uso di AJAX in Javascript, nella misura in cui troppi utenti provino a connettersi allo stesso script (superando il limite massimo per le connessioni imposto dal server). In questi casi alcuni programmatori inseriscono delle pause negli script (ad esempio di 500 ms) per dilatare le richieste, ma fare ipotesi temporali in un contesto asincrono come quello di AJAX rischia di essere controproducente e di accumulare comunque le richieste. È molto più plausibile, nello specifico, che il limite sia del server in uso, che magari deve essere aumentato impostando al meglio il massimo numero di connessioni ammissibili in contemporanea. Le specifiche tecniche di questo errore sono state formalizzate in RFC 4918.

Come aumentare il numero di connessioni concorrenti in Apache

Intervenire sul server in questa direzione comporta il tuning di uno o più parametri, che possono coinvolgere i limiti di memoria RAM, di processi in esecuzione e così via, per cui deve essere effettuato con grande attenzione. Ammettiamo di fare uso di Apache2 con PHP attivato sul modulo MPM, tanto per citare un esempio molto diffuso. In questo caso desideriamo rendere più elastico e “permissivo” il limite al fine di evitare la comparsa di quell’errore bloccante. Ogni utente che accede ad una pagina web, del resto, effettua molto più di una singola connessione, perchè il suo browser ha bisogno di scaricare file JS, CSS immagini e/o video, per cui andiamo a capire come impostare il limite “di fino”.

La configurazione standard di PHP nella versione MPM Worker (che è quella di Apache2) si trova nel file httpd.conf e potrebbe avere una forma del genere:

ServerLimit 16
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

Tradotto: quando parte, in questo caso Apache attiva due processi concorrenti child (StartServers); ogni processo avrà la possibilità di generare a sua volta 25 thread concorrenti (ThreadsPerChild).

Fino a qui il calcolo è determinato da un massimo numero di connessioni pari a 25 x 2 = 50 connessioni o client concorrenti alla volta (precisamente con 25 client alla volta in più, ogni volta che si supera il limite massimo, in modo dinamico). ServerLimit serve a questo unto a limitare il numero di child generabili al più, ed estendendo il calcolo precedente abbiamo 16 x 25 = 400 connessioni concorrenti ammissibili in tutto. Giù giocando su questi tre parametri possiamo dimensionare il sistema in modo più adeguato, a seconda delle necessità e del numero medio di accessi che fa il nostro sito. In alcuni casi può essere utile modificare il valore di MaxClients, che pone un ulteriore limite all’occupazione massima di memoria, il che potrebbe causare in certi casi l’errore in questione.

Tipicamente gli errori lato server di questo tipo possono essere anche causati da problemi di eccessiva memoria RAM occupata, per quanto si ricorra spesso allo swap questa pratica non è per forza consigliabile, perchè riduce l’efficenza nel servire le singole request. Un webserver non dovrebbe mai  dover fare swap per essere efficente, in quanto lo scambio aumenta la latenza di ogni richiesta oltre un punto che gli utenti considerano veloce. Ciò genera un circolo vizioso in cui gli utenti si fermano ed effettuano continui aggiornamenti della pagina web, aumentando ulteriormente il carico. MaxClients è un parametro che aiuta anche in questo, limitando la possibilità che lo stesso client generi infiniti child (inutili)

Ottimizzare il file precedente è possibile mediante questa configurazione alternativa (da testare sul campo, ovviamente, non basta fare copia-incolla passivo per risolvere anche da voi), con limite a 1000 client contemporanei:

# Apache 2 PHP - worker MPM
<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
Nessun voto disponibile

Che te ne pare?

Grazie per aver letto 507 Insufficient Storage: cos’è è come risolverlo di Salvatore Capolupo su Trovalost.it
507 Insufficient Storage: cos’è è come risolverlo (Guide, Assistenza Tecnica, Errori più comuni)

Articoli più letti su questi argomenti: