Sziasztok!
Átnéztem az utolsó egy év témáit, de nem találtam ilyet, ezért leírom a problémámat, hátha tud valaki segíteni.
Bérelt tárhelyem van, ahol Apache+MySQL+PHP fut. Néhány napja előjött a fenti hiba, azaz:
Error Code: 1226
User 'myuser' has exceeded the 'max_user_connections' resource (current value: 4294967295)
Ez elég hihetetlenül hangzik, ugyanis száznál kevesebb a napi látogatóim száma, és a PHP-ban csak mysql_connect
függvényt használok csatlakozásra, ami elvileg lezárja a kapcsolatot a szkript végén. A MySQL-t ezen kívül naponta 1x hívja a CRON, három, elég hosszú (8-10 perces) nagy INSERT ... SELECT
végrehajtására. Ezek eddig gond nélkül lefutottak, most Query interrupted válasszal jönnek vissza.
Miután 1-2 óra múlva ismét engedett csatlakozni (gondolom, ledobta az aktív kapcsolatokat), az alábbi SQL változókat néztem meg:
'Aborted_connects', '11838'
'Connections', '873413'
'Max_used_connections', '40'
'Threads_connected', '15'
A connections változó értéke másodpercenként kb 10-zel nő, az aborted connects első ránézésre arányosan kevesebbel.
Szerintetek hol lehet a gond? Hogyan tudnám megnézni, hogy ki/mi küld ennyi kérést? (A SHOW processlist;
csak 1 folyamatot mutat, magát azt, amivel éppen kérem) Bármilyen ötletet köszönettel fogadok!
- 2006 megtekintés
Hozzászólások
Egy próbát megér:
sudo lsof /usr/lib/libmysqlclient.so*
- A hozzászóláshoz be kell jelentkezni
Sajnos ez nem virtuális szerver, hanem csak egy tárhely, amely nem biztosít shell hozzáférést :-(
- A hozzászóláshoz be kell jelentkezni
Akkor tiltsd le a cron szkriptet, és ha továbbra is nő a kapcsolatszám panaszkodj egy adminnak. A szkriptben ugye nincs ciklus?
- A hozzászóláshoz be kell jelentkezni
Nincs benne. Írtam a supportnak, hátha nem az én hibám :-) Köszi a segítséget.
- A hozzászóláshoz be kell jelentkezni
signup
- A hozzászóláshoz be kell jelentkezni
Az mi?
- A hozzászóláshoz be kell jelentkezni
Saját adatok->követés alatt hozza ezt a topicot.
És mivel én is írtam (most) bele, már nálam is. ;)
- A hozzászóláshoz be kell jelentkezni
Ja! Köszi :-)
- A hozzászóláshoz be kell jelentkezni
show full processlist a mysql konzolba.
ha ott tenyleg van egy rakas connectionod, akkor ha nem local socketen keresztul tortenik a mysql kapcsolat letrehozasa, akkor a Host oszlopban ott lesz a kettospont utan azoknak a socketeknek a szama, amin a mysql kliensek kapcsolodnak a szerverhez.
valami ilyesmi lene az eredmeny konzolbol futtatva:
+-------+--------+-----------------+------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+--------+-----------------+------+---------+------+-------+-----------------------+
| 89690 | tyrael | localhost:47454 | NULL | Sleep | 154 | | NULL |
| 89723 | tyrael | localhost | NULL | Query | 0 | NULL | SHOW FULL PROCESSLIST |
+-------+--------+-----------------+------+---------+------+-------+-----------------------+
innen ha lenne shelled, akkor tovabb lehetne nyomozni, hogy mi kapcsolodik azon a socketen (netstat -ntalpu|grep 47454 pl.), ami dobna valami ilyesmi eredmenyt:
tcp 0 0 127.0.0.1:47454 127.0.0.1:3306 ESTABLISHED 28920/mysql
amibol latszodna, hogy a 28920-es piddel futo mysql kliens fogja azt a socketet.
ha ez egy script lenne (apache worker), akkor lsof-fel(lsof -p 28920) meg tudnad nezni pid alapjan, hogy melyik script fut abban a workerben eppen.
tudom hogy ez a topicnyitonak nem feltetlen megoldas, mert nincs shellje, de azert gondoltam masnak hasznos lehet.
-------------------
show processlist: itt csak a sajat useredhez tartozo queryket fogod latni, kiveve ha van SUPER jogod.
Aborted_connects nem feltetlenul azt jelenti, hogy megszakadt a kapcsolat, lehet hogy pl. jogosultsagok miatt letre sem jott, lasd http://www.mysqlperformanceblog.com/2008/08/23/how-to-track-down-the-so…
"Query interrupted" jelentheti azt is, hogy a hosting cegnek van valami cronjobja, ami lelovoldozi a sokaig futo mysql lekerdezeseket, hogy vedje magat az elszabadult queryktol.
erdemes lenne megkerdezni a hosting ceget.
a Connections az egy globalis szamlalo, szoval az hogy novekszik meg nem jelenti azt, hogy te porgeted.
Tyrael
- A hozzászóláshoz be kell jelentkezni
Köszönöm, Tyrael!
Az én usereimnek csak két folyamata fut, hasonlóan, ahogy nálad:
1109356 neils 80.99.127.157:43440 NULL Sleep 23 NULL
1109387 neils 80.99.127.157:43441 NULL Query 0 NULL "SHOW FULL PROCESSLIST"
a Connections az egy globalis szamlalo, szoval az hogy novekszik meg nem jelenti azt, hogy te porgeted.
Itt lehet a kutya elásva, valaki más miatt szívok? A szolgáltató kb. annyit mondott, hogy tiltsam le a WordPress plugineket. Nem, mintha használnék WordPresst :-)))))
- A hozzászóláshoz be kell jelentkezni
"Query interrupted" jelentheti azt is, hogy a hosting cegnek van valami cronjobja, ami lelovoldozi a sokaig futo mysql lekerdezeseket, hogy vedje magat az elszabadult queryktol.
Ja, egyébként igen, van background process killing, csak régen még engedte, mostmár nem. Lehet, hogy szigorúbbra állították.
- A hozzászóláshoz be kell jelentkezni
Segitene a user tablabol a felhasznalohoz tartozo max_* mezok tartalma, ill. megprobalhatod meg a flush user_resources parancsot is.
- A hozzászóláshoz be kell jelentkezni
Hát igen, ezekhez mind-mind olyan jogok kellenének, amik nekem nincsenek :-) Köszönöm azért, most fogok átállni virtuális szerverre, ami egyébként is időszerű. Ott már próbálkozhatok ezekkel!
- A hozzászóláshoz be kell jelentkezni