Obserwujemy dziwne zachowanie i nie jesteśmy pewni, czy to problem z apache, php, mysql lub systemem operacyjnym, a więc do wielkich mózgów stackoverflow!Procesy Apache/PHP zawieszają się podczas interakcji z MySQL
Mamy Apache i mod_php rozmawiające z serwerem mysql5. Czasami proces będzie się zawieszał, próbując odczytać z deskryptora pliku.
rozpalania strace na jedną z nich (wszystkie procesy wiszące pokazał te same wyniki) dało to:
[[email protected] ~]# strace -p 8450
Process 8450 attached - interrupt to quit
read(57, <unfinished ...>
Więc co ona próbuje odczytać?
[[email protected] ~]# lsof -p 8450
...
...
httpd 8450 apache 57u IPv4 5546599 TCP
prweb133v.local:36615->hadat.local:mysql (ESTABLISHED)
To nasz serwer mysql! Ok, więc może próbował odczytać wyniki zapytania, pomyślałem. Sprawdzając listę procesów na serwerze mysql, połączenie zostało ustanowione, ale w stanie SLEEP.
Hmmmm.
Tak więc sprawdziłem netstat, aby zobaczyć, kto próbował wysłać/odebrać co.
Na serwerze internetowym:
[[email protected] ~]# netstat -t -n -a | grep 36615
tcp 0 5 172.23.179.6:36615 172.23.179.67:3306
ESTABLISHED
i na serwerze mysql nie było nawiązane połączenie ale 0 w wysyłaniu lub odbieraniu kolejki.
Jakieś pojęcie o tym, czym mogą być te tajemnicze 5 bajtów lub dlaczego losowo nie dostają serwera mysql?
Pozdrawiam!
Mike
Czy można połączyć się z bazą danych samodzielnie i/lub z innych aplikacji? – jdizzle
Czy jesteś pewien, że dzieje się to losowo i że nie jest powiązane z konkretnym skryptem? –
Jestem kolegą Mike'a; kiedy znajdujesz się w stanie awaryjnym, możesz otworzyć nowszą przeglądarkę (uzyskać nową sesję PHP) i korzystać z witryny tak, jakby nic się nie stało, więc DB jest nadal w porządku. Może być powiązany ze skryptem zawartym na wszystkich stronach, ale jest (jak na razie) losowy na jaką stronę, którą przeglądasz, uruchamia błąd. – crb