2009-03-10 10 views
8

Çok fazla CPU ve Mysql kaynağı gerektiren bir temizlik yapan bir cron işi çalıştırmak istiyorum. Sadece sunucu nispeten meşgul değilse çalıştırmak istiyorum.PHP betiğimde sunucunun meşgul olup olmadığı nasıl anlaşılır?

Bunu PHP'den belirlemenin en kolay yolu nedir? (örneğin, son dakikada kaç tane sorgunun yapıldığını döndüren bir sorgu var mı? ...)

cevap

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.'); 
    } 
} 

deneyin Muhtemelen uyku vs DB üzerinde yük hakkında iyi bir gösterge aktif kaç görmek Mysql List Processes işlevinde bilgi kullanabilirsiniz ihtiyaçlarınız

+0

Not: Sadece PHP 5.1.3 veya daha yeni bir sürümünde çalışır, Windows'ta değil. –

+1

Thx, Chad Birch. Basitçe şunu unutmuşum :) "Ağır yük" ile hiç karşılaşmadığınız galeriyi kazanın :) – SMka

+0

@Chad with PHP <5.1.3 ile sys_getloadavg() 'yı değiştirip cevabımdan değiştirebilirsiniz: split (' ', file_get_contents ('/proc)/loadavg ')) – vartec

3

Bu bir Unix sistemiyse, uptime çıktısını ayrıştırın. Bu, genellikle "meşgul" in iyi bir ölçüsü olarak düşünülen CPU yükünü gösterir. 1.0'un yakınında veya üzerinde herhangi bir şey "tamamen meşgul" anlamına gelir.

Bu çıkışta, yük ortalamasının 1, 5 ve 15 dakika boyunca verilmesiyle üç CPU "yükleme" zamanı vardır. Komut dosyanız için hangisi uygunsa onu seçin. "Yük" is here'un tanımı.

2

için bu işlevi güncellemek için.

Linux kullanıyorsanız, toplam sistem yükünü görmek için Sys GetLoadAvg işlevini kullanabilirsiniz.

4

Linux'ta /proc/loadavg dosyasından yükleme alabilirsiniz.

$load = split(' ',file_get_contents('/proc/loadavg')) 
$loadAvg = $load[0] 
İlgili konular