2009-03-10 8 views
8

मैं एक क्रॉन नौकरी चलाने के लिए चाहता हूं जो क्लीनअप करता है जो बहुत सारे CPU और MySQL संसाधनों को लेता है। मैं इसे केवल तभी चलाने के लिए चाहता हूं जब सर्वर अपेक्षाकृत व्यस्त न हो।मेरी PHP स्क्रिप्ट कैसे बता सकती है कि सर्वर व्यस्त है या नहीं?

PHP से निर्धारित करने का सबसे आसान तरीका क्या है?

उत्तर

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

कोशिश आप शायद Mysql List Processes समारोह में जानकारी का उपयोग कर सकते हैं कि कितने बनाम सो सक्रिय हैं, डीबी पर भार के बारे में एक सभ्य सूचक को देखने के लिए।

यदि आप लिनक्स पर हैं तो आप समग्र सिस्टम लोड देखने के लिए Sys GetLoadAvg फ़ंक्शन का उपयोग कर सकते हैं।

+0

नोट: केवल PHP 5.1.3 या नए में काम करेगा, न कि विंडोज़ पर। –

+1

थक्स, चाड बिर्च। बस इस बारे में भूल गए :) जीत पर "भारी भार" के साथ प्रोडक्शन सर्वर कभी नहीं देखा :) – SMka

+0

@ PHP के साथ चाड <5.1.3 आप sys_getloadavg() को मेरे उत्तर से संस्करण के साथ प्रतिस्थापित कर सकते हैं: split ('', file_get_contents ('/ proc/loadavg ')) – vartec

3

यदि यह एक यूनिक्स प्रणाली है, uptime के उत्पादन को पार्स (उदाहरण के लिए, वहाँ एक प्रश्न है कि कितनी क्वेरी अंतिम मिनट में किए गए थे? ... रिटर्न है)। यह सीपीयू लोड दिखाता है जिसे आम तौर पर "व्यस्त" का एक अच्छा उपाय माना जाता है। 1.0 के पास या उससे अधिक कुछ भी "पूरी तरह से व्यस्त" है।

उस आउटपुट में तीन CPU "लोड" समय होते हैं जो लोड औसत को 1, 5, और 15 मिनट से अधिक देते हैं। जो भी आपकी स्क्रिप्ट के लिए समझ में आता है उठाओ। "लोड" की परिभाषा is here। अपनी आवश्यकताओं

2

को यह समारोह अद्यतन करने के लिए

4

लिनक्स पर आप /proc/loadavg फ़ाइल से लोड प्राप्त कर सकते हैं।

$load = split(' ',file_get_contents('/proc/loadavg')) 
$loadAvg = $load[0] 
संबंधित मुद्दे

 संबंधित मुद्दे