Newsgroup: it.comp.os.linux.sys
Titolo: httpd e consumo smodato di memoria

Salve a tutti,
ho un problema con una slackware (aggiornata a 10.2) relativamente 
all'utilizzo della VM. In pratica il demone httpd arriva a dei consumi 
di memoria molto alti, saturando tutta la memoria disponibile (512mb) e 
saturando anche la swap (quasi 1 gb).
Ovviamente il server diventa quasi inservibile, e per rimanere in piedi 
killa i processi "non indispensabili", perlomeno per lui ;)
Il problema ora è debuggare la cosa...ho provato con strace -p 
numerodelprocesso ma passano fiumi di informazioni a mio dire poco 
interessanti...ho analizzato la proc/numeroprocesso ma non ho tratto 
informazioni utili. lsof stessa cosa, niente di fatto.
Ho provato ad aggiungere un'ulteriore swap (un file da 512) e piano 
piano l'ha saturato.
I log non sono stati utili purtroppo, e non riesco ad imputare il 
problema a nessun intervento ordinario/straordinario effettuato sul server.
Vorrei capire cosa sia la causa, a questo punto direi <vorrei capire 
qual'e' l'applicazione che genera questo disastro>. Altra nota, se 
riavvio il server tutto riparte correttamente, ma ci mette poco a 
tornare nello stesso stato. Il kernel usato è una 2.4.31 monolitica + 
grsecurity (è su da giugno e fino due giorni fa andava da dio).
Qualcuno ha qualche consiglio da darmi?
Grazie in anticipo.

 Qualcuno ha qualche consiglio da darmi?
Uso anche io la Slack 10.2 su k2.6.x, usi PHP o altri script? Ricordati di
descrivere sempre la tua configurazione, le versioni dei programmi
utilizzati e delle ultime cose fatte prima che il problema si verificasse.
Suppongo che tu usi PHP, prova ad attivare il log di tutti gli errori, i
notice ed i warning (php.ini). E' facile che sia un bug in uno script PHP o
CGI, probabilmente in un qualche loop.
Non credo possa essere questo, ma comunque controlla che Apache non sia
abilitato ad aprire processi infiniti (httpd.conf). Se è impostato ad
infinito, settalo ad un numero simile a quello proposto di default e fai
qualche prova.
Controllando tra i bug di Apache 1.3.x, ho notato che è possibile che uno
dei moduli di PHP sia buggato e produca problemi di memoria. Prova a
disabilitare uno per uno i moduli PHP che hai aggiunto, compresi quelli di
Zend se li possiedi.
Se usi ZendStudio5beta con ZendServer è possibile che ci siano dei problemi.
Disabilita subito ZendOptimizer, se lo possiedi.
Spero di esserti stato di aiuto, byez!
By Design

 
anche io credo che il problema derivi da un applicazione legata ad apache,
non da apache stesso.
se usi php quali sono i valori della sezione "Resource Limits" in php.ini?
ciao

david mugnai ha scritto:

Ehm si scusate, un po' di stanchezza dovuta alla nottata balorda :/
Uso php 5.0.4, sul server ci sono circa 200 siti, di cui 40 o 50 
utilizzano php.
E' un server di hosting quindi c'e' molta etereogenità negli script 
utilizzati, su c'e' anche mod_security per dare una filtratina alla 
mondezza e i siti php sono sotto safe_mode.
La macchina non ha problemi di carico, in situazioni normali ha circa 
200mb di memoria inutilizzata, la cpu sta a posto.
Sono sicuro anche io che sia uno script che da noia al sistema, devo 
solo capire quale.
Ecco il resource limits.
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30     ; Maximum execution time of each script, in 
seconds
max_input_time = 60     ; Maximum amount of time each script may spend 
parsing request data
memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)
Altre info utili di apache:
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0

 memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)
se php e apache sono aggiornati (una controllatina non guasta) queste qua
sopra dovrebbero prevenire ad uno script php di mangiarsi tutta la memoria
Mi viene un dubbio, se uno script php esegue un comando esterno, la
quantita' di memoria utilizzabile da quest'ultimo e' limitata dal valore
memory_limit? penso di no, sai per caso se qualche cliente esegue
programmi esterni da pagine php?
Un problema con un database? se non sbaglio php5 utilizza di default
sqlite, che e' un database file-based, hai controllato se qualche cliente
non ti ha creato un qualche database gigantesco? (find ti potrebbe aiutare
a trovarlo)


A me è capitato che lo script prendesse tutta la memoria (anche se c'è 
impostato il memory limit) se faccio una cosa del genere (notare $i e $I):
for ($i=0;$i<10;$I++) echo "<option blablabla>";
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
Il Paradiso lo preferisco per il clima, l'Inferno per la compagnia.
		-- Mark Twain

 a trovarlo)
Per quanto ne so e per quanto ho potuto vedere nessuno usa sqlite :(
Che cosa strana, è da questa mattina che va tutto bene, noto solo che a 
volte vengono swapwnati 20 o 30 processi di httpd aggiuntivi, poi vanno 
piano piano in defunct e muoiono...ma credo sia una cosa alquanto regolare.

 solo capire quale.
Prova a fare una ricerca su tutti gli script modificati dopo il momento in
qui il server ha cominciato a dare di matto. Controlla anche eventuali CGI.
Non puoi risalire a quali processi, e quindi a quali siti, si verificano
questi problemi?
Byez!
By Design