Zjištění zabrané paměti php skriptem ve Windows
Příkaz memory_get_usage() ve windows byl do verze PHP 5.2.5 problém. Tady je možnost jak vypsat velikost zabrané paměťi ve windows i ve starších verzích PHP.
Při práci s rozsáhlými datovými bloky je funkce pro zjištění zabrané paměti nedocenitelná. Zvlášť pro ladění aplikace. Osobně jsem narazil na problémy se zpracováním xml a s rušením referencí na objekty. Nejsem si jist jak je to v posledních verzích php, ale dříve jsem u php pozoroval zajímavé chování, kdy přetekl nepochopitelně zásobník.
Problém je pokud vyvíjíte své skripty na stroji, kde běží Windows. Do verze PHP 5.2.5 nebyl funkční příkaz memory_get_usage(), od verze 5.2.5 již můžeme používat tuto funkci stejně jako na linuxu.
Pokud máte starší verzi funkci definujte takto (testováno na WINDOWS XP/Apache >2):
- /*
- na tomto místě by bylo lepší použít
- if (!function_exists('memory_get_usage')) {
- function memory_get_usage() {
- ... a definovat funkci pro použití ve windows, použil jsem jiný název, abych mohl porovnat výstupy obou funkcí
- */
- function getMemUsage() {
- $output = array();
- @exec('tasklist /FI "PID eq '.getmypid().'" /FO LIST', $output);
- $a = $output[3];
- $m = explode(" ",trim($a));
- return round(preg_replace('/[D]/', '', $m[count($m)-2])*1024, 5);
- }
Výsledek je vracen v kB, proto násobím hodnotou 1024. Velikost zabrané paměti najdete v poli na pozici 3, ve většině verzí PHP a Apache jsem paměť našel na této pozici, ale jiné zdroje uvádějí pozici 8 ($a = $output[8];). Stačí si výsledné pole vypsat a zjistíte, kde se náchází správný řádek. Paměť je uvedena až na konci řádku, takže musíme odstranit všechny nechtěné znaky.
Funkci jsem testoval ve dvouch verzích PHP, výsledek pro PHP 4.4.7:
- OS: Windows_NT
- Current PHP version: 4.4.7
- Server signature:
- Apache/2.2.6 (Win32) DAV/2 mod_ssl/2.2.6 OpenSSL/0.9.8g mod_autoindex_color PHP/4.4.7 Server at web.www.webfaq.cz Port 80
- Server software: Apache/2.2.6 (Win32) DAV/2 mod_ssl/2.2.6 OpenSSL/0.9.8g mod_autoindex_color PHP/4.4.7
- Before alocate WINDOWS get_memory_usage - 19.734375 MB.
- After alocate 5MB of memory WINDOWS get_memory_usage - 24.7578125 MB.
A výsledek pro PHP 5.2.5:
- OS: Windows_NT
- Current PHP version: 5.2.5
- Server signature:
- Apache/2.2.6 (Win32) DAV/2 mod_ssl/2.2.6 OpenSSL/0.9.8g mod_autoindex_color PHP/5.2.5 Server at web.www.webfaq.cz Port 80
- Server software: Apache/2.2.6 (Win32) DAV/2 mod_ssl/2.2.6 OpenSSL/0.9.8g mod_autoindex_color PHP/5.2.5
- Before alocate WINDOWS get_memory_usage - 24.6796875 MB.
- Before alocate LINUX get_memory_usage - 0.0766906738281 MB.
- After alocate 5MB of memory WINDOWS get_memory_usage - 29.71875 MB.
- After alocate 5MB of memory LINUX get_memory_usage - 5.0767288208 MB.
komentáře
RSS Komentáře


