ugrás a tartalomhoz

Nagyon lassú PHP futás

fchris82 · 2009. Május. 29. (P), 22.21
Keresgélek mindenütt, de nem találok semmit. Az alábbi szavak kombinációit próbálgattam: windows xp apache php slow run load httpd.exe 100%

A doctrine-t szerettem volna tanulmányozni a saját gépemen. Lefuttattam a generateModelsFromDb() fv-t egy 100 táblás adatbázison, aztán kezdtem volna homokozni, de a Doctrine::loadModels() fv 11 másodpercig fut :-/
Ugyanezt a homokozó készletet feltöltve egy éles szerverre átlagban vhol 0.008 s körül van az eredmény. Ez 1400-szoros különbség! Eddig is érezhetően lassabban futottak a dolgok a gépemen, mint a szerveren, de most jutottam el oda, hogy ez zavar, valószínűleg nem normális, és vhol vmi hiba van. Oké, hogy csak egy laptop, de azért annyira nem szar: AMD Turion X2 1800 MHz, 3 GB RAM.

A rendszer:
Win XP
Apache/2.2.4 (Win32) mod_python/3.3.1 Python/2.5.2 PHP/5.2.9-2
PHP 5.2.3, majd 5.2.9-2
MySQL 5.0.45

Eddig az alábbiakkal próbálkoztam:
- 5.2.3-as PHP-ról frissítettem az 5.2.9-re
- Az összes PHP extension-t kikapcsoltam az ini-ben (nem felejtettem el újra indítani az Apache-ot)
- Kikapcsoltam a víruskeresőt
- Kiiktattam minden pythonnal kapcsolatos Apache beállítást

Egyik se változtatott az eredményen. A 11 másodperc alatt a httpd.exe 100%-ra terheli az egyik magot. Nem emlékszem, hogy kezdetek óta ilyen rossz, vagy csak vmi után romlott el. Ritkán dolgozok a saját gépemen.

Érdekes, hogy a PHP frissítés után a phpinfo() csak néhány helyen ad vissza 5.2.9-es verziószámot, továbbra is 5.2.3 szerepel több helyen, pedig az Apache-ot újra indítottam.

Vkinek van tippje, merre kutakodjak?
 
1

((:

szabo.b.gabor · 2009. Május. 30. (Szo), 09.43
tegyél fel egy linuxot a gépedre ;)
2

Helyett

janoszen · 2009. Május. 30. (Szo), 09.53
Microsoft VirtalPCbe is jól lehet Linuxot föltenni. :) Samba share, oszt még xdebuggolni is tudsz vele.
3

Apache log?

janoszen · 2009. Május. 30. (Szo), 10.03
Apache log mit ír? Nekem akkor csinált ilyet, amikor a kedvenc webszerverünk egy PHP bug miatt segfaultolt. Asszem valami olyasmi volt a titok nyitja session kezelésnél leledzett, amikor shutdown timekor static metódusból példányosítottunk... na az Apache azt rosszul viselte.
4

biztos php?

Szekeres Gergő · 2009. Május. 30. (Szo), 10.20
nem lehet, hogy connectnél valamit átállít az adatbázis kapcsolatban, ami miatt az sql lassul be? Nézd meg a slow query logot, hátha ott van a baj.

ha nem, akkor szedd le az apacheot és a php-t, és rakd fel újra... :)
5

Részben megoldódott

fchris82 · 2009. Május. 30. (Szo), 13.47
Úgy nézz ki, részben megoldotta a problémát a PHP újrarakása ÉS a gép újraindítása. Vmiért ez is kellett neki. Most már csak 200x lassabb, az egy fokkal jobb :D

Biztosan nem az SQL-lel volt a probléma, mert az a kódrészlet, ami lassan futott nem csinált semmi adatbázis műveletet, még csak nem is csatlakozott. Egyszerűen bejárta egy könyvtár (models) tartalmát és azt beletette egy tömbbe. Még csak nem is include-olt.

Jobban belegondolva, vmiért a fájl és könyvtár műveletek lassúak. Az Apache logokból semmi nem derül ki.

--- Itt eltelt egy óra ---

Részletesen megnéztem a kódokat, és ez a rész okozza a galibát:
$it = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($dir),
            RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($it as $file) {}
A fenti foreach() lassítja be az egészet. Így, semmit sem csinálva több, mint 2 másodperc alatt járja be a 299 elemes "tömböt".
var_export()-al "cache-eltem" a foreach() végeredményét, így kihagyva, hogy minden egyes futásnál újra kelljen ezt játszani, így már az én gépemen is 0.0012 s alatt fut le az "inicializálás"! Csak így minden egyes modell változásnál ürítenem kell a cache-t. Mondjuk az még belefér :)