# Serverauslastung ermitteln



## Woddi (28. April 2002)

Hat jemand eine Idee, wie ich in einem PHP-Skript die Serverauslastung von Apache- und MySQL-Server ermitteln kann?


----------



## Nitromaus (28. April 2002)

Würd mich auch interesieren wie das geht. Könnte ich für mein Forum auch gut gebrauchen


----------



## dave_ (28. April 2002)

serverauslastung ?
meinst du traffic ?

Von ein paar mysql querys usw. wird ein server imho nicht technisch ausgelastet, ausserdem hast du ja bestimmt keinene eigenen server von daher wird das  nicht möglich sein.


----------



## Woddi (28. April 2002)

Serverauslastung im Sinne von...

aktuelle Verbindungen
maximale Verbindungen (das steht ja zumindest in der Konfiguration)

sowas wie "verursachter Traffic" wär natürlich auch nicht schlecht 

Das muss man doch irgendwie aus dem PHP-Skript jeweils für Apache und MySQL auslesen können, meinetwegen auch mit Hilfsfunktionen usw... Ach ja: Natürlich hab ich nen eigenen Server


----------



## Woddi (29. April 2002)

http://www.apache.org/server-status?auto

Funktioniert aber nur, wenn das Apache-Modul mod_status geladen ist. Ich denke, das kann jeder leicht mit PHP einlesen und verarbeiten. Jetzt muss ich nur noch rausfinden, was die Symbole bedeuten  Wer das weiss, kann mir gerne im Webserver-Forum behilflich sein 

http://www.tutorials.de/forum/showthread.php?threadid=16663


BTW: Ein einfaches Skript zur Anzeige des vollständigen MySQL-Server-Status:


```
$result = mysql_query("SHOW STATUS") or die(mysql_error());
while ($row = mysql_fetch_array($result)) echo $row[0]." - ".$row[1]."<br>";
```


----------



## Woddi (29. April 2002)

```
##
## Apache-Auslastung (mod_status benötigt)
##
$filename = "http://localhost/server-status?auto";
$file = fopen ($filename, "r");
while ($line = fscanf($file, "%s %s %s\n")) {
	$description = $line[0];
	if (isset($line[2])) {
		$description .= " ".$line[1];
		$value = $line[2];
	} else $value = $line[1];
	if ($description == "BusyServers:") $busyworkers = $value;
	elseif ($description == "IdleServers:") $idleworkers = $value;
}
fclose($file);

# gültig für Windows (Unix: ersetze "($busyworkers + $idleworkers)"
# durch durch den Wert "MaxClients" aus der httpd.conf)
$LAST_APACHE = number_format((100 * $busyworkers / ($busyworkers + $idleworkers)), 2);


##
## MySQL-Auslastung
##
$result = mysql_query("SHOW STATUS") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
	if ($row[0] == "Threads_connected") $mysql_connected = $row[1];
}
$result = mysql_query("SHOW VARIABLES") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
	if ($row[0] == "max_connections") $mysql_max_connections = $row[1];
}
mysql_free_result($result);
	
$LAST_MYSQL = number_format((100 * $mysql_connected / ($mysql_connected + $mysql_max_connections)), 2);
```

So: Ermittlung von Serverlast (anhand von Connections) für Apache- und MySQL-Server in PHP-Skripten... Einziges Problem ist, dass fopen() eine zusätliche Connection zum HTTP-Server erstellt. Ansonsten sollte das doch so korrekt sein, gell? Oder gibts hier Programmierer, die beim Anblick die Hände überm kopf zusammenschlagen?


----------

