Witam,

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|


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? smile.gif

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?