ako ima na serveru brdo konekcija u time wait znaci da mu je pool pobrljaveo
TIME_WAIT konekcija je u ACTIVE CLOSE stanju. Odatle konekcija moze da ide samo u CLOSE
negde pravi problem
- ili otvara i zatvara konekcije bez razloga
- ili ne moze da uspostavi konekciju kako treba
u cemu je fora, ako se dobro secam to go*no od pool-a na tom pos*anom app serveru (ozbiljno razmisli da predjes na gf3 ili na ibm ili na nesto trece TC je fuj) po defaultu ima foru da na "svaku gresku" radi rekonekciju svih konekcija. Sta se onda desi, ti imas 1 konekciju koja radi i pool napravi jos 100 konekcija npr koje cekaju i vrte se u prazno posto tvoj app idluje. Onda prodje timeout i mysql otkaci svih tih 100 konekcija, onda tebi zatreba jos konekcija posto si dobio usera koji zahteva novu konekciju, glupavi pool ti da neispravnu konekciju (timeoutovala je ali pool to ne zna), ti uzmes tu konekciju i ona "ne radi", ti onda u aplikaciji treba da kazes pool-u da mu ta konekcija ne radi i on treba da je ubije i da tebi da drugu. Ako ti ne vratis pool-u pravilno tu konekciju nego samo puknes exception pool skonta da ima gresku i zatvori SVE konekcije i otvori ih opet (ubijajuci i sve aktivne i sve neaktivne u tom trenutku) .... onda ti dobijes neku konekciju opet brdo njih timeoutuje i opet sve ispocetka .. e sad posto njemu ono zatvaranje ne radi bas kako treba ostane mu milion konekcija da "visi" jer ceka da ih zatvori garbage kolektor, a u destruktoru mysql konektora se ne zatvara konekcija pa ista ostane da visi dok je operativni sistem ne ubije... tako neke nebuloze .. tako da se toga nakupi i ti onda vise u jednom trenutku iz tog procesa ne mozes da otvoris novu konekciju i dobijas tako glupave poruke (tipa no route). Druga varijanta je da on ne zatvara sve konekcije nego samo tu koju mu ti vratis da ne valja, opet je slicna prica, da li mu ti pravilno kazes da je konekcija umrla ili on treba to da pretpostavi .. i tu sad ima milion idiotluka TC-a koje treba izbeci ..
Sve u svemu, kombinacija je
- pravilnog konfigurisanja TC jdbc pool-a
- pravilnog uzimanja i vracanja konekcija
- pravilnog obavestavanja TC-a u slucaju da konekcija ne valja
ako bilo sta od toga uradis lose - imaces probleme. Kako da sve tri stvari odradis da valja - uvatis neki java/tc forum pa se nadas da ce neko iskusan da se javi, ja sam probo vise puta i na kraju od*ebo to go*no i instalirao GF (prvo 2, sada 3) i mene glava vise ne boli :)
Naravno uvek postoji mogucnost da
- mysql server to otkacinje zato sto je tamo neki "protection" servis tipa selinux, fail2ban i slicno zakljucio da pravis mnogo konekcija pa te dodao na neki black list
- pogresno si upisao port ili ip ili tako nesto od mysql-a pa stvarno ne moze da se konektuje (jdbc nije bas nesto preterano inteligentan, ko ga osmisli..)
...