Mam jakiś bardzo dziwny problem z długością wykonywania skryptu, a dokładniej z destruktorami. Wszystko wydało się, kiedy napisałem sobie w destruktorze jednego z obiektów metodę zczytującą czas wykonywania i zapisującą go do bazy.
Problem w tym, że zaczęły ni stąd ni zowąd pojawiać się czasy rzędu 200-300 sekund (mniej więcej raz na pięć minut, bez żadnej widocznej regularności). Wstawiłem więc kilka timestampów do arraya i wysłałem sobie na maila w przypadku takiego uruchomienia. No i czasy były następujące:
Kod
Exec times:
| ABSTIME | ACTION | ZEROBASE | SPLIT |
|1170327265.7606|start | 0.0000| 0.0000|
|1170327265.7621|initclass_Config_Main | 0.0015| 0.0015|
|1170327265.7663|initclass_Fused_LastRequest | 0.0057| 0.0043|
|1170327265.7667|initclass_Fused_Db | 0.0061| 0.0004|
|1170327265.7677|initclass_Adodb | 0.0071| 0.0010|
|1170327265.7899|initclass_Fused_Auth | 0.0293| 0.0222|
|1170327265.7910|initclass_Fused_Track | 0.0304| 0.0011|
|1170327265.7921|initclass_Cache_Worker | 0.0315| 0.0011|
|1170327265.8134|initclass_Fused_NewRouter | 0.0528| 0.0213|
|1170327265.8153|initclass_Fused_Module | 0.0547| 0.0019|
|1170327265.8156|initmod_listing | 0.0551| 0.0003|
|1170327265.8265|initmod_location | 0.0659| 0.0108|
|1170327265.8379|initmod_location | 0.0773| 0.0114|
|1170327265.8386|initmod_page | 0.0780| 0.0007|
|1170327265.8390|initclass_Savant | 0.0784| 0.0004|
|1170327265.8395|initclass_Savant_Savant3 | 0.0789| 0.0006|
|1170327265.8415|savant_theme/index/index.php | 0.0809| 0.0020|
|1170327265.8417|savant_theme/header.php | 0.0811| 0.0002|
|1170327265.8421|savant_/location/tpl/title.php| 0.0815| 0.0004|
|1170327265.8425|savant_location/tpl/header.php| 0.0820| 0.0005|
|1170327265.8430|initmod_bookmark | 0.0825| 0.0005|
|1170327265.8436|savant_theme/index/common.php | 0.0830| 0.0006|
|1170327265.8438|savant_/search_no_featured.php| 0.0832| 0.0002|
|1170327265.8439|initmod_about | 0.0833| 0.0001|
|1170327265.8449|initmod_location | 0.0843| 0.0010|
|1170327265.8463|initmod_location | 0.0858| 0.0015|
|1170327265.8492|savant_ocation/tpl/selects.php| 0.0887| 0.0029|
|1170327266.0053|initmod_iplocation | 0.2447| 0.1561|
|1170327266.0071|initmod_listing | 0.2466| 0.0018|
|1170327266.0072|initmod_personalization | 0.2467| 0.0001|
|1170327266.0126|savant_tion/tpl/iplocation.php| 0.2520| 0.0054|
|1170327266.0129|savant_heme/index/featured.php| 0.2524| 0.0003|
|1170327266.0173|savant_pl/listing_featured.php| 0.2567| 0.0043|
|1170327266.0179|initmod_currency | 0.2573| 0.0006|
|1170327266.0217|savant_tion/tpl/breadcrumb.php| 0.2612| 0.0038|
|1170327266.0245|savant_/tpl/listing_norows.php| 0.2639| 0.0027|
|1170327266.0251|savant_tion/tpl/breadcrumb.php| 0.2645| 0.0006|
|1170327266.0263|savant_theme/footer.php | 0.2657| 0.0012|
|1170327440.3185|script end | 174.5580| 174.2922|
| ABSTIME | ACTION | ZEROBASE | SPLIT |
|1170327265.7606|start | 0.0000| 0.0000|
|1170327265.7621|initclass_Config_Main | 0.0015| 0.0015|
|1170327265.7663|initclass_Fused_LastRequest | 0.0057| 0.0043|
|1170327265.7667|initclass_Fused_Db | 0.0061| 0.0004|
|1170327265.7677|initclass_Adodb | 0.0071| 0.0010|
|1170327265.7899|initclass_Fused_Auth | 0.0293| 0.0222|
|1170327265.7910|initclass_Fused_Track | 0.0304| 0.0011|
|1170327265.7921|initclass_Cache_Worker | 0.0315| 0.0011|
|1170327265.8134|initclass_Fused_NewRouter | 0.0528| 0.0213|
|1170327265.8153|initclass_Fused_Module | 0.0547| 0.0019|
|1170327265.8156|initmod_listing | 0.0551| 0.0003|
|1170327265.8265|initmod_location | 0.0659| 0.0108|
|1170327265.8379|initmod_location | 0.0773| 0.0114|
|1170327265.8386|initmod_page | 0.0780| 0.0007|
|1170327265.8390|initclass_Savant | 0.0784| 0.0004|
|1170327265.8395|initclass_Savant_Savant3 | 0.0789| 0.0006|
|1170327265.8415|savant_theme/index/index.php | 0.0809| 0.0020|
|1170327265.8417|savant_theme/header.php | 0.0811| 0.0002|
|1170327265.8421|savant_/location/tpl/title.php| 0.0815| 0.0004|
|1170327265.8425|savant_location/tpl/header.php| 0.0820| 0.0005|
|1170327265.8430|initmod_bookmark | 0.0825| 0.0005|
|1170327265.8436|savant_theme/index/common.php | 0.0830| 0.0006|
|1170327265.8438|savant_/search_no_featured.php| 0.0832| 0.0002|
|1170327265.8439|initmod_about | 0.0833| 0.0001|
|1170327265.8449|initmod_location | 0.0843| 0.0010|
|1170327265.8463|initmod_location | 0.0858| 0.0015|
|1170327265.8492|savant_ocation/tpl/selects.php| 0.0887| 0.0029|
|1170327266.0053|initmod_iplocation | 0.2447| 0.1561|
|1170327266.0071|initmod_listing | 0.2466| 0.0018|
|1170327266.0072|initmod_personalization | 0.2467| 0.0001|
|1170327266.0126|savant_tion/tpl/iplocation.php| 0.2520| 0.0054|
|1170327266.0129|savant_heme/index/featured.php| 0.2524| 0.0003|
|1170327266.0173|savant_pl/listing_featured.php| 0.2567| 0.0043|
|1170327266.0179|initmod_currency | 0.2573| 0.0006|
|1170327266.0217|savant_tion/tpl/breadcrumb.php| 0.2612| 0.0038|
|1170327266.0245|savant_/tpl/listing_norows.php| 0.2639| 0.0027|
|1170327266.0251|savant_tion/tpl/breadcrumb.php| 0.2645| 0.0006|
|1170327266.0263|savant_theme/footer.php | 0.2657| 0.0012|
|1170327440.3185|script end | 174.5580| 174.2922|
Czyli wszystko w porządku do czasu kiedy skrypt działa. Dla pewności wstawiłem jeszcze die() i przed nim kolejny pomiar. No i znów wyszło j.w.
W związku z tym pytania:
Spotkał się ktoś z tym problemem?
- Spotkał się ktoś z tym problemem?
- Po die(); mam connection_state() == 0, czyli jak rozumiem połączenie jest nadal otwarte? Bo jeśli tak, to GoogleBot zczytuje mi stronę przez 174 sekundy, co pewnie mu się zbytnio nie spodoba.
- Na co stawiacie?
Strona może ładować sporo danych (może być nawet kilkanaście+ mega), więc na razie podejrzewam jakiś problem ze zwalnianiem pamięci... Chociaż na wykresach pamięci nic takiego nie widać. Używam memcache'a, ale nie widzę żadnych problemów z nim (w runtime działa jak należy), chyba, że to w czasie rozłączenia?
Do tego mam jeszcze jeden problem, w którego wypadku pomaga restart apacza. Jak ustalę w czym rzecz, dam znać. Na razie ujawnia się tak, że obciążenie serwera spada do zera, połączenia idą w górę, czasy wykonywania nie rosną (może nie są zapisywane), coś tam się uruchamia, ale rzadko...
Help?

Ach, jeszcze dwa pytanka:
Znacie jakiś sposób wymuszenia na apaczu zamknięcia połączenia?
Albo znacie może jakiś sposób na wpłynięcie na kolejność destrukcji obiektów?