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>
👇 Da non perdere 👇
- Informatica 🖥
- intelligenza artificiale 👁
- Lavoro 🔧
- Marketing & SEO 🌪
- Mondo Apple 🍎
- Sicurezza & Privacy 👁
- 💬 Il nostro canale Telegram: iscriviti
- 🟡 Guida pratica al reboot
- 🔴 Il codice USSR **04* funziona?
- 🟠 Tiscali: come accedere o registrare una nuova e-mail