PDA

Bekijk Volledige Versie : php server geheugen controle



eweps
30/06/07, 20:30
Met onderstaand stukje programmeerwerk heb ik inmiddels het aantal vrije geheugen uit de server verkregen.

Nou is het zo dat bij de meeste servers het geheugen in een soort "slaapstand" wordt gezet. Als de processen bijvoorbeeld 10% van het geheugen gebruiken, dan wordt 70% in de "slaapstand" gezet.

Met onderstaand script krijg ik de hoeveelheid vrij geheugen, echter is hier het geheugen in de "slaapstand" al afgehaald.

Is er met PHP ook een mogelijkheid om het daadwerkelijk gebruikte geheugen uit te lezen?



// geheugen
$memory = explode(" ", shell_exec("free -m| head -2|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
$memory = ($memory[1] / $tmemory[0]) * 100;
echo round($memory, 2);


Edit typfoutje:



// geheugen
$memory = explode(" ", shell_exec("free -m| head -2|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
$memory = ($memory[1] / $memory[0]) * 100;
echo round($memory, 2);

LeaseWeb
02/07/07, 23:39
cat /proc/meminfo

Dan krijg je alle informatie precies.

eweps
03/07/07, 12:00
Daarmee lukt het volgens mij inderdaad, bedankt!



<?php
// geheugen
$memory[0] = trim(substr(shell_exec("cat /proc/meminfo | grep 'MemFree'"), 9));
$memory[1] = trim(substr(shell_exec("cat /proc/meminfo | grep 'Mem'"), 9));
$memory[2] = $memory[1] - $memory[0];

//$memory = explode(" ", shell_exec("free -m| head -2|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
//$memory = ($memory[1] / $memory[0]) * 100;
$memory = ($memory[2] / $memory[1]) * 100;
echo ';'.round($memory, 2);
?>


Hm, toch niet. Ik kan nu inderdaad wel alle waarden uitlezen:

Zou het kunnen dat ik grep Active en Inactive moet gebruiken? Dat lijken me waarden die meer overeenkomen.

(heb momenteel even geen ssh tot mijn beschikking)

- MemTotal: geeft het totale aantal geheugen.
- MemFree: geeft het vrije geheugen, maar daar is het geheugen in "slaapstand" al af.
- Buffers: dit lijkt me ook nog vrij geheugen.
- Cached: dit lijkt me ook nog vrij geheugen.
- Active: lijkt mij het aantal geheugen dat actief(in gebruik) is.
- Inactive: lijkt mij het aantal geheugen dat niet actief (niet in gebruik) is.

Echter kom ik met geen enkele berekening op het totaal aantal geheugen uit.

http://gentoo-wiki.com/FAQ_Linux_Memory_Management

Volgens die pagina is MemFree + Buffers(free) + Cached(free) het totale aantal vrije geheugen.

met meminfo krijg ik echter geen cached(free) te zien, kan dat kloppen?

$memory = explode(" ", shell_exec("free -m| head -2|tail -1|awk '{print $2\" \"$4\" \"$6\" \"$7}'"));
$memory = (($memory[0] - ($memory[1] + $memory[2] + $memory[3])) / $memory[0]) * 100;
echo round($memory, 2).'%';

Dit geeft als het goed is de goede waarde, iemand die het met mij oneens is?

bvankuik
07/07/07, 12:59
Nou is het zo dat bij de meeste servers het geheugen in een soort "slaapstand" wordt gezet. Als de processen bijvoorbeeld 10% van het geheugen gebruiken, dan wordt 70% in de "slaapstand" gezet.

Misschien bij jouw servers, maar bij die van mij zeker niet! Als die instelling er in zat, dan stond deze zeker uit: je wil dat vrij geheugen wordt gebruikt om data op schijf te cachen.





// geheugen
$memory = explode(" ", shell_exec("free -m| head -2|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
$memory = ($memory[1] / $memory[0]) * 100;
echo round($memory, 2);


Als je vrij geheugen wilt hebben, dan doe je:


free -m | head -3 | tail -1 | awk '{print $4}'


Uit /proc/meminfo zal wel kunnen, maar dan moet je gaan rekenen, voor zover ik het kan zien.

Uitleg: je wilt het vrije geheugen (kolom 'free'). Hier staan twee rijen in. De eerste rij geeft het "echt vrije geheugen" aan. De tweede rij geef het "echt vrije geheugen" aan, maar dan met buffers/cache eraf -- immers, buffers/cache wordt verkleind als het nodig is om applicaties te laden. Dat is dus niet het "echt vrije geheugen", maar het "vrij beschikbare geheugen voor applicaties"....