• User

    Uso eccessivo memoria virtuale

    Salve a tutti vi pongo il mio problema.
    Ho un server WIN 2003 con IIS 6, Core duo da 2.4 e 2 gb, di ram, HD 250 RAID 1.
    Da alcuni giorni un ns server ha problemi di utilizzo eccessivo della CPU, che spesso raggiunge il 100%.

    Ho intecettato il problema, isolando il sito che genera il consumo eccessivo della CPUe isolandolo su un unico APPLPOOL. Ho impostato un riciclo dello stesso ogni 500 mb di utilizzo della memoria virtuale e praticamente ciò avviene ogni 60/120 secondi. Il sito in questione genera un traffico di circa 10000 utenti al giorno e utilizza un db mysql. Inizialmente pensavo fossero dei file asp.net che generavano le thumb al volo, ma anche dopo ever eliminato l'utilizzo di questi file il risultato non è cambiato.

    Il sito è sviluppato in ASP e ho controllato tutte le pagine per verificare che non rimanessere aperte delle connessioni e che quindi il sistema andasse in stallo.

    MYSQL è impostato con 200 connessioni max.

    Adesso riesco a farlo funzionare perchè il riciclo è continuo, ma utilizzando delle sessioni praticamente non posso gestirlo.

    Qualcuno ha qualche suggerimento? Può dipenderedal numero eccessivo di utenti, sempre che si possa parlare di eccessivo?


  • Moderatore

    Difficile dirlo, bisogna individuare il processo che consuma tutta quella memoria e poi capire perchè consuma tanta memoria.

    10.000 unici su un dedicato non mi pare siano chissà che, a meno che il sito non offra streaming video 😄

    Potrebbero essere dei memory leak, in quel caso la colpa andrebbe direttamente ad iis o uno dei suoi moduli.

    In ogni caso fai un'analisi di tutti i processi e servizi in esecuzione e cerca di trovare il mangiatore di ram.


  • User

    ho analizzato i log e quant'altro ma nulla, non riesco a capire dove risiede il problema.
    Avete qualche suggerimento, non so dove sbattere la testa. Credo che il problema sia dovuto a qualche connessione che magari rimane attiva, ma come individuarla nel codice asp. Le pagine che ho verificato in corrispondenza dell'episodio sono sempre diverse, e facendo io delle prove non riscontro il problema. Il mio dubbio è che l'evento si verifichi in concomitanza di + operazioni simultanee, ma non saprei come. Inoltre perchè il problema è sorto solo in questi giorni?


  • Moderatore

    Dovresti dare un'occhiata al task manager, magari usare un software come Procexp http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx per verificare chi è che consuma così tanta memoria


  • User

    Già fatto, infatti il problema è del processo w3wp.exe (IIS) del sito in questione che utilizza la CPU. Volevo capire se esiste un metodo che mi dice cosa sia accaduto in quel preciso momento sulla macchina


  • Moderatore

    Un metodo semplice e preciso purtroppo non c'è.

    Una breve panoramica la danno sul sito MS http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ad56540c-2323-4316-b981-7ebb70352baa.mspx?mfr=true

    Un'ulteriore verifica che è possibile fare è incrociare i dati riguardanti i picchi di consumo della RAM, col traffico del sito web e se è possibile modificare lo script/gli script asp in modo che logghino le loro attività ( richieste, timestamp, ecc... )

    Almeno così si può arrivare ad avere un quadro abbastanza completo della situazione.

    Sarebbe una buona idea creare uno script che verifica il consumo di memoria da parte di mysql. Ma realisticamente non credo che mysql sia il problema.


  • User

    Facendo un confronto far i log e l'orario dei picchi ho notato che l'utilizzo di una pagina in particolare, che tra le altre cose utilizza una funzione jquery per la gallery. Ora mi chiedo se potrebbe essere quella funzione a rallentare il sistema. In particolare lo script è la gallery highslide. Questa pagina è stata controllata e non mi risultano connessioni appese. Tra l'altro questa è la pagina + visitata e ciò mi porta a credere che sia qui il problema. Come potrei fare un log degli eventi generati della stessa?


  • Moderatore

    L'unico modo è modificare il codice dello script.


  • User

    Ho verificato tutti gli script, modificandoli all'occorrenza. Ma il risultato non è cambiato. Ho anche provato a lanciarele pagine visualizzate nel fase del blocco come da log, ma nessuna di queste pagine ha fatto impennare l'uso della CPU. Cosa molto strana è che la memoria è come se rimanesse bloccata per un arco di tempo che varia da secondi ad alcuni minuti per poi azzerarsi dopo un po.

    Potrebbe essere un problema di server o di banda?


  • User Attivo

    Ciao Salentu.com,
    e se fosse semplicemente che la pagina riceve più accessi negli ultimi tempi, magari per un riposizionamento nella serp di google?

    Si sa che gli script più o meno preconfezionati mangiano risorse...

    Perché non verifichi il numero di accessi giornalieri alla pagina prima e dopo il problema?


  • User

    Le pagine sono state create da me stesso, e ho verificato il tutto nei minimi particolari, compresa la chiusura di tutte le connessioni. é possibile che il problema sia dovuto al numero di accessi, ma ho verificato il numero di accessi sulle singole pagine nell'istante in cui si verifica il problema e al max ho registrato 10 accessi contemporanei sulla pagina. Ho fatto dei test per verificare anche il consumo nell'istante in cui apro le pagine e ogni pagina appena completato il caricamento svuota la memoria.

    Come detto prima l'aumento può essere quantificato in un 10%, ma non +.


  • Moderatore

    Il massimo che puoi fare è appunto verificare gli accessi e controllare la correttezza del codice.

    Se il problema persiste ci sono dei memory leakage in IIS. In questo caso purtroppo puoi farci ben poco.

    L'ultima cosa che potresti fare è modificare lo script incriminato e aggiungere un pò più di verbosità. Gli fai scrivere in un file la ram consumata in un dato momento, registri il timestamp delle visite, gli fai tracciare una mappa delle varie variabili allocate e del loro consumo di memoria. Di più non puoi fare.


  • User

    Eccomi di nuovi qui, con il solito problema. Vi aggiorno un po sulla situazione. Il problema è dovuto al traffico generato da un sito in particolare, ma credo che il problema fondamentale sia dovuto a mysql

    In pratica da quello che ho capito quando ci sono molti accessi questi congelano la memoria e quindi l'intero server, che poi riprende a funzionare quando questa si sblocca. In pratica le pagine si aprono ma a volte impiagano anche 1 minuto.

    Ho visto che mysql ha dei picchi di traffico di 35 mb (questo l'ho verificato dal pannello di mysql administrator) anche se la webfarm dove risiede il server mi dice che il picco massimo di banda utilizzata è di 7mb.

    Il server risiede su una linea a 10mb dedicati,

    qui di seguito riporto la mia configurazione mysql, magari ci sono degli errori nella stessa che portano a ciò.

     
    [client]
    port=3306
    [mysql]
    default-character-set=latin1
     
    [mysqld]
    port=3306
     
    default-character-set=latin1
    default-storage-engine=myisam
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
     
    max_connections=200
     
    query_cache_size=0
     
    table_cache=64
     
    tmp_table_size=100M
     
    thread_cache_size=8
    #*** MyISAM Specific options
    myisam_max_sort_file_size=100G
    myisam_max_extra_sort_file_size=100G
     
    myisam_sort_buffer_size=199M
     
    key_buffer_size=256M
     
    read_buffer_size=64K
    read_rnd_buffer_size=256K
     
    sort_buffer_size=256K
     
    #*** INNODB Specific options ***
     
    innodb_additional_mem_pool_size=7M
    innodb_flush_log_at_trx_commit=1
     
    innodb_log_buffer_size=4M
    innodb_buffer_pool_size=328M
     
    innodb_log_file_size=164M
     
    innodb_thread_concurrency=8
    wait_timeout=20
     
    
    

    Come potete vedere ho impostato il valore wait_timeout a 20 secondo, in modo da svuotare eventuali connessioni rimaste aperte o bloccate.

    Quello che ho notato e che da quando si è verificato il problema la connessione ftp si disconnette o si congela prima del timeout impostato da sistema. Altra cosa anomala, pur avendo questi disservizi le visite sono aumentate in questi giorni.


  • Moderatore

    35 MB non mi sembrano incredibili per mysql, anzi sono pochini.

    Se c'è un problema del genere vuol dire che asp mantiene le vecchie connessioni aperte invece di chiuderle, per cui ovviamente mysql è costretto a gestire sempre più connessioni e consuma sempre più memoria.


  • User

    Avevo pensato la stessa cosa e ho controllato le connessioni una ad una ma vengono tutte chiuse. inoltre guardando dal pannello di mysql il limite max raggiunto di connessioni aperte è stato di 64, che non mi sembra eccessivo.


  • User Attivo

    Dico una banalità probabilmente: hai verificato se c'è qualche query in particolare che crea problemi? Magari effettuata su qualche campo non indicizzato?


  • Moderatore

    Quindi si tratta proprio di traffico. Addirittura siamo a 64 connessioni aperte, ben al di sotto del limite impostato nel file di configurazione.

    E consuma 35 MB di memoria che francamente sono un'inezia.


  • User

    Effettivamente il problema e sorto nelle ultime 2 settimane, con l'aumento delle visite. Sul sito sono presenti 150 siti che in questo periodo generano un traffico di 25000 accessi.

    Potrebbe essere un problema di processore, che non riesce a gestire tutto questo traffico. Il processore è un intel E6600 2,4 ghz.


  • Moderatore

    Il processore non è certo un mostro e ovviamente tutto dipende dal carico a cui è sottoposto.

    Puoi monitorare l'attività della cpu e vedere come si comporta. Però 150 siti e 25000 unici metterebbero ko chiunque.


  • User

    image