Domanda

Una delle più interessanti "caratteristiche" in ColdFusion è come gestisce le richieste esterne. La sostanza di base di esso è che quando un'interrogazione verso una sorgente esterna attraverso <cfquery> o o qualsiasi altra richiesta esterna così passa la richiesta esterna a un driver specifico ea quel punto CF si è in grado di sospenderlo. Anche se un timeout è specificato nella query o nel cfsetting è categoricamente ignorato per tutte le richieste esterne.

http://www.coldfusionmuse.com/index .cfm / 2009/6/9 / killing.threads

Quindi, con questo in mente il problema che abbiamo incontrato è che in qualche modo la comunicazione tra il nostro server CF e il nostro server mySQL a volte va storto e se ne va dietro thread appesi. Essi hanno le seguenti caratteristiche.

  1. Gli spettacoli filo riattaccato in CF e non può essere ucciso da FusionReactor.
  2. Non è non filo appeso visibile in MySQL, e nessuna query in esecuzione attiva (solo i soliti posti letto).
  3. La banca dati risponde ad altre chiamate e sembra funzionare correttamente.
  4. connessioni Max non sono stati raggiunti per il DB né l'utente.

Mi sembra l'unico candidato probabile è che in qualche modo CF sta facendo una richiesta, mySQL risponde a tale richiesta, ma con una risposta che ignora CF e continua a mantenere il filo aperta in attesa di una risposta da mySQL. Questo spiegherebbe perché il database sembra mostrare alcun segno di problemi, ma CF mantiene un thread in attesa aperto per la risposta misteriosa.

In genere questi fili appesi appaiono in modo casuale su script altrimenti di lavoro (come ad esempio la pubblicazione di un commento su un articolo di notizie). Anche mentre un thread è appeso per quello script, altre richieste di questo script passerà attraverso, il che implicherebbe che lo script non è neccessarily in colpa, ma piuttosto la condizione affrontato quando è stato eseguito lo script.

corse alcuni test per determinare che non si trattava di un errore generato mysql max_connections ... abbiamo creato un utente, ha dato 1 connessioni max, legati che il collegamento con un sonno (1000) di query ed eseguita un'altra query. Purtroppo, correttamente errored senza generare un thread appeso.

Quindi, io sono rimasto a questo punto senza alcun indizio che cosa sta andando male. C'è qualche altro limite di connessione o di timeout, che potrebbe essere la causa della comunicazione tra i server di andare storto?

È stato utile?

Soluzione 3

Lunga storia breve, ma credo che il causato era dovuto CF8 di elaborazione delle immagini di Coldfusion. E 'stato solo buggy e ora in CF9 ho mai visto quel problema di nuovo.

Altri suggerimenti

Una delle cose che si dovrebbe iniziare a guardare è l'hardware tra i due server. E 'possibile che si dispone di un router o un bridge o NIC che sta cadendo i pacchetti occasionali. Ciò può provocare il pensiero scatola mySQL di aver completato l'operazione, mentre il server CF sta lì e aspetta una risposta completa a tempo indeterminato, creando un filo appeso.

3Com ha alcuni dettagli sui test per la perdita di pacchetti qui: http://support.3com.com/infodeli/tools/netmgt/tncsunix/product/091500/c11ploss.htm#22128

Abbiamo avuto un problema simile con un server MS SQL. Lì, la causa principale è stato un problema noto in cui, per qualche ragione, il server pensa che sia l'arresto, e si blocca filo (anche se il server è, ovviamente, non in fase di arresto).

Non siamo stati in grado di eliminare il problema, ma siamo riusciti a ridurlo disattivando le connessioni DB pool e giocherellare con la frequenza di aggiornamento di connessione. (Penso che ho avuto che etichetta giusta -. Non ha accesso ad amministratore nella mia nuova occupazione) Entrambi sono nelle proprietà di connessione in Amministrazione

.

Solo una nota: Il problema non è del tutto con CF. Il problema, a quanto pare, interessa tutte le applicazioni Java. Il che non lo fa, in alcun modo, riduco come infastidito ottengo da questa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top