Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509

    [php-mysql] sito inagibile mente il processo è attivo

    Ciao a tutti,
    avrei bisogno di un consiglio su come risolvere (o cosa cercare per trovare informazioni) sul problema in cui mi sono imbattuto.


    in pratica ho un sito la cui pagina è divisa in due parti che lavorano in maniera distinta.
    un lato si occupa di creare/modificare/importare i dati tramite form o file.csv
    l'altro si occupa di ricercare le informazioni, elenchi, etc..


    il problema è che se ad esempio carico un file di diversi MB, per tutto il tempo che il file è in elaborazione (non upload, ma il server legge il file riga per riga e lo carica nel DB) l'altra sezione è inutilizzabile.
    parlo di file ma potrebbe essere la modifica di un documento contenente 30.000 righe.

    in pratica è come se nella "sezione" creata per il pc da cui ci si collega, possa effettuare una sola operazione e le altre sono messe in coda.

    mentre lavora, se mi collego da altri indirizzi IP o da phpmyadmin, il sistema risponde tranquillamente.

    a livello di mysql, i privilegi hanno tutto impostato a 0
    quindi penso sia un limite di PHP o del server.

    **SE** mi sono spiegato in maniera chiara, cosa potrebbe essere e cosa dovrei cercare per avere informazioni a riguardo ? (o per risolvere se risolvibile)

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    La pagina fa uso di Ajax? Asicrono o sincrono?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    La pagina fa uso di Ajax? Asicrono o sincrono?
    ciao,
    cerco di dare più informazioni.

    pagina html che contiene 2 iframe.

    ogni iframe carica rispettivamente una pagina php pura.

    situazione attuale
    Frame sinistra:
    - Legge un file CSV contenuto sul server con fopen e fgetcsv
    - crea delle query multiriga che poi inoltra al server.

    Frame destra:
    - mentre aspetto che l'elaborazione del file csv finisca, voglio sfogliare una lista di dati.
    - quando premo cerca, va in clessidra.
    - l'esito appare quando il frame di sinistra ha terminato.

    SE provo ad accedere allo stesso sito/url da un browser differente per eseguire le ricerche, posso farlo

    purtroppo non ho molta conoscenza o proprio non ne ho...

    da quel che ho capito al livello logico è che il server assegna una "sessione" all'utente che si collega.
    se mi collego in contemporanea al sito www.miosito.it
    con explorer ho in ID di SESSIONE
    con chrome ho in ID di SESSIONE diverso.
    e ogni ID può eseguire un'operazione alla volta.
    ho provato ad aprire più schede dallo stesso browser.. rimango in attesa a prescindere.

    quello che non riesco a capire se la singola operazione è :
    -fissa
    -modificabile
    -dipende dal server, dalla programmazione o da mysql

    in pratica, ho capito cosa succede a grandi linee ma non riesco a capire (non avendo conoscenze) dove guardare per capire se il problema è aggirabile o meno.

    unica cosa , so che non dovrebbe essere il database. i privilegi sono impostati tutti a 0 e le richieste sono su tabelle differenti, quindi l'eventuale mancanza del lock table non dovrebbe incidere.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Non vorrei che fosse una limitazione del provider per non sovraccaricare il server, verifica con il provider la possibilità di blocchi/limitazioni
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    che limitazioni potrebbero esserci a livello di provider?

    il sito è su un server virtuale che mi sono inventato di prendere.. e ho installato centOS
    prima ero con aruba, ma comunque il problema rimane.

    se vado su phpmyadmin e guardo i processi , ne vedo 2 dallo stesso utente
    quindi non capisco dove sia la limitazione.
    anche perchè se apro un'altra pagina dallo stesso browser, rimango in attesa. se cambio browser mi lascia andare avanti.
    so che dipende dalla mia scarsa conoscenza... ma vorrei capire cosa cercare per risolvere...

  6. #6
    Hai controllato quali sono le pagine che ti fanno questo?

    Per esempio, basta che sia una pagina che fa un lungo ciclo e perde tempo, o è proprio quella pagina che elabora il csv a bloccarti?

    Te lo chiedo perché mi sembra molto strano quello che ti succede, e anche quando ho avuto pagine in elaborazione per molti secondi, sono sempre riuscito a vedere e lavorare con altre pagine dallo stesso browser sullo stesso sito, quindi sono dell'avviso che sia qualcosa che tu fai in quello specifico codice a bloccare...

    In ogni caso, io non farei MAI andare su un server in produzione un qualcosa che richieda un tempo di elaborazione superiore a qualche secondo: in questi casi, devi creare un meccanismo che elabori le informazioni a tranci, che so, 100 record alla volta, così che ciascuna di queste sezioni impegni per poco tempo il server, lasciandolo libero di rispondere anche ad altre richieste.

    Senza contare che, a meno che non si tratti di una esportazione o un'altra operazione del genere (che però può beneficiare allora di una esecuzione a tranci) non mi viene in mente nessuna ragione per la quale sia davvero utile mostrare nel browser una valanga simile di informazioni: NESSUN utente si metterà a leggere 30000 righe! Quindi di certo io almeno suddividerei in pagine i risultati.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Secondo me dovrebbe essere un problema legato al comportamento del browser, perché dal punto di vista del server due richieste in arrivo da due iframe diversi sono completamente slegate una dall'altra (la tua ipotesi sulle sessioni è campata in aria).
    Hai detto che se lavori sul frame B mentre A è in esecuzione ti compare la clessidra. Dovresti provare a trovare un modo per capire se lo script sul server parte subito o se parte solo dopo la risposta dell'altro (ad esempio mettendo una insert su db come primissima operazione dello script, e andando subito a verificare quando compare la riga sul db). Se lo script parte solo alla fine, è come penso io, ed è il browser a trattenere la richiesta. Se invece parte subito, non so più cosa pensare

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    ciao a tutti,
    parto da due presupposti :

    1) parlando del file csv, è un'operazione interna. in realtà non è un vero e proprio problema che impieghi più di qualche secondo.
    sono file che vanno dalle 180.000 righe ai 2.000.000 di righe circa.
    per quello che sono riuscito a fare, ho spezzato i file per averne di più piccoli.
    la query viene costruita tipo phpmyadmin, quindi composta da un 4000 righe.

    2) tutte le query reali hanno condizioni e limiti in modo che tutto venga tutto elaborato con tempi sotto il secondo.
    quindi in utilizzo normale non vi è alcun problema.



    il problema è nato dopo l'importazione dei dati.
    Non avendo precedentemente impostato un limite o un meccanismo di recupero dati parziale, quando ho testato un "mostrami l'elenco dei dati inseriti" ha recuperato 180mila ++ righe.

    ovviamente ha impiegato svariati secondi per costruire 180.000 righe a forza di tr/ td.......
    quindi ho fatto partire sull'altro frame una richiesta di creazione.
    il risultato è quello che vi ho già indicato.


    dopo il messaggio di Luca200, ho fatto un'altra prova.

    ho caricato un altro DB a cui accedo tramite PhpMyAdmin con chrome
    ho aperto la stessa pagina su due finestre.
    in questo db ho caricato due tabelle, una con 2 milioni di righe e una con 380 mila righe.
    quindi :
    1) su una finestra ho eseguito una LEFT JOIN tra le due tabelle in base alla colonna primaria.
    so che è follia ma volevo tenere impegnato il DB.
    2) sulla seconda finestra ho richiesto di vedere il contenuto di una terza tabella che contiene 10 righe.
    Risultato : entrambe le finestre sono in clessidra e qualunque operazione faccio su phpmyadmin apre una nuova pagina in clessidra.
    3) mentre tutto è in clessidra ho aperto explorer e caricato la stessa identica pagina di phpmyadmin.
    Risultato: su explorer posso usare tranquillamente phpmyadmin
    a quel punto per sbloccare la situazione, devo accedere ai processi e ucciderli senza pietà.


    quindi non è un problema di pagina
    quindi cosa può essere?
    il browser che fa una sola richiesta per volta?
    il server che ha qualche impostazione errata?
    io che mi invento cose impossibili ?

  9. #9
    Hai provato, come ti suggerivo, a vedere se anche una pagina in puro php, senza accesso al db, è in grado di bloccarti così?

    Questo almeno ti direbbe se il problema è legato a mysql o no...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    ciao,

    ho provato a creare due file distinti.
    file1: ciclo For >> 120 con uno sleep di 1 secondo.
    file2: ciclo For >> 120 senza sleep.

    come dicevo all'inizio, non essendomi mai occupandomi di configurare/installare server, ho tante lacune o mancanze di conoscenze a riguardo, spero che questi siano test corretti.

    Test1:
    -lancio File1 -> va in clessidra
    -lancio File2 -> si esegue correttamente

    Test2:
    -modifico il File2 in modo che includa il File1 e basta
    -Lancio il File1
    -Modifico il File1 e rimuovo lo sleep -> nel frattempo File1 è in esecuzione e in clessidra.
    -Lancio File2 ->si esegue correttamente. (mentre File1 è in clessidra per ancora 1 minuto)

    Test3:
    -Lancio il File1
    -Modifico il File1 e rimuovo lo sleep -> nel frattempo File1(pagina1) è in esecuzione e in clessidra.
    -Lancio File1 su un'altra pagina -> File1(no sleep. pagina2) va in clessidra.

    Riassumendo:
    # PAGINA1 - PAGINA2 => ESITO
    - File1(sleep) - File2(nosleep) => file2 viene eseguito
    - File1(sleep) - File2(include file1(nosleep) ) => file2 viene eseguito
    - File1(sleep) - File1(nosleep) => File1(nosleep) viene eseguito al termine del caricamento di File1(sleep)

    nell'applicazione web le pagine che lancio sono diverse (file1 e file2)
    ma entrambe fanno un include degli stessi file che portano a collegarsi con il DB

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.