2009-03-10 3 views
8

Ich möchte einen Cron-Job ausführen, der aufräumt, der eine Menge CPU- und MySQL-Ressourcen benötigt. Ich möchte es nur ausführen, wenn der Server nicht relativ beschäftigt ist.Wie kann mein PHP-Skript feststellen, ob der Server beschäftigt ist?

Was ist der einfachste Weg, um das von PHP zu bestimmen? (Gibt es beispielsweise eine Abfrage, die zurückgibt, wie viele Abfragen in der letzten Minute ausgeführt wurden?)

Antwort

12
if (function_exists('sys_getloadavg')) { 
    $load = sys_getloadavg(); 
    if ($load[0] > 80) { 
     header('HTTP/1.1 503 Too busy, try again later'); 
     die('Server too busy. Please try again later.'); 
    } 
} 

Versuchen Sie diese Funktion, um Ihre Bedürfnisse zu aktualisieren

+0

Hinweis: funktioniert nur in PHP 5.1.3 oder neuer und nicht unter Windows. –

+1

Thx, Tschad Birke. Vergiss das einfach :) Niemals productions server mit "heavy load" auf win gesehen :) – SMka

+0

@Chad mit PHP <5.1.3 du kannst sys_getloadavg() durch version ersetzen aus meiner antwort: split ('', file_get_contents ('/ proc/loadavg ')) – vartec

3

Wenn dies ein Unix-System ist, analysieren Sie die Ausgabe von uptime. Dies zeigt die CPU-Last, die allgemein als ein gutes Maß für "beschäftigt" angesehen wird. Alles in der Nähe oder über 1.0 bedeutet "komplett beschäftigt".

Es gibt drei "Lade" -Zeiten der CPU in diesem Ausgang, die den Lastdurchschnitt über 1, 5 und 15 Minuten angeben. Wählen Sie, was für Ihr Skript sinnvoll ist. Definition von "Last" is here.

2

Sie wahrscheinlich die Informationen in der Mysql List Processes Funktion nutzen zu können, um zu sehen, wie viele vs. Schlaf aktiv sind, ein anständiger Indikator über die Belastung der DB.

Wenn Sie Linux verwenden, können Sie die Sys GetLoadAvg Funktion verwenden, um die Gesamtsystembelastung zu sehen.

4

Unter Linux können Sie laden von /proc/loadavg Datei.

$load = split(' ',file_get_contents('/proc/loadavg')) 
$loadAvg = $load[0] 
Verwandte Themen