mysqld fut nagytömegben
# ps ax |grep mysqld
4056 ? S 0:01 /usr/local/mysql/libexec/mysqld
van valakinek tippje, hogy miért futhat ebből 41 darab?
■ 4056 ? S 0:01 /usr/local/mysql/libexec/mysqld
van valakinek tippje, hogy miért futhat ebből 41 darab?
Hány kapcsolat?
kevesebb, mint amennyi process
Addig stimmel, hogy a perzisztens kapcsolat meghagyja a kapcsolatot, de minden kapcsolat külön-külön processt igényel? Ez nekem furcsa egy kicsit, mert elvileg erre vannak a szálak.
Azért kezdett el érdekelni a dolog, mert kérdeztem valakit erről, azt mondta, náluk csak egy van, pedig nekik rendes hosting szerverük van, ez meg csak egy hobbi gép.
Kamikáze módszer
Mysql.com
A mysql -t két üzem módban lehet futtani. Van a monolit rész, amikor egy process fut, és ez végzi a dolgokat, illetve van egy threadelt mód amikor minden egyes kapcsolódó processznek külön szálat nyit.
A második módszer pl. tipikusan jól használható akkor, hogyha a kevés forrásból származó kód fut a webszerveren, ahol a lapok túlnyomó töbsége igényel sql kapcsolatat, és ráadásul pconnecetet is használ. Ebben az esetben minden egyes apache processnek lessz egy mysql párja. (Tudom elméletileg lehet olyan hogy nem lessz, de ettől most tekintsünk el.) Ugyanakkor a mysql alapvetően lusta, és ha treadelt módban használod, akkor nem szivesen gyárt child processeket, ezért van egy childcache nevü hely ahol a már megszületett , de éppen most nem használt childeket tartja. Ezért lessz olyan hogy a show processlist -ben kevesebb sort látsz mint ahány a mysqld fut. Ami mondjuk mindig igaz, hisz a master process aki forkol sosem futtat query-t.
A kamikaze módszerrel meg nem jutsz semmire, mert ha kilövöd akkor pár mp-én belül újra létrejön ha szükséged van rá.
Plussz a hibát kell kezelni nem a tünetet.
Legközelebb adjatok olyan tanácsot is, hogy irjon egy cli php -ét ami 20 alá lövi a mysql szerver threadeket.
Threadcache
Köszönöm mindenkitől a felhomályosítást.