2013-11-22 9 views
5

से फ़ाइल लोड करने के लिए टाइमआउट सेट करें, इसलिए मेरे पास एक दिलचस्प स्थिति है और मुझे यकीन नहीं है कि इसके आसपास कैसे जाना है।ईबीएस शेयर

हमारे पास एक प्रक्रिया है जो हमारे बिक्री डेटा पर एक समग्र रूप लेती है और फिर Google चार्ट के माध्यम से एक ग्राफ बनाता है। डेटाबेस (या उस मामले के लिए Google) को हथियाने से रोकने के लिए यह केवल हर 30 मिनट में चलता है। यह पिछली फ़ाइल को यह निर्धारित करने के लिए देखता है कि यह 30 मिनट की सीमा पर है या नहीं, और यदि ऐसा है, तो यह नई फ़ाइल बनाता है। लोड बैलेंसर के पीछे हमारे पास दो सर्वर हैं। तो दोनों फाइलों को इस फ़ाइल को स्टोर करने के लिए एक ही स्थान तक पहुंच होनी चाहिए। हमने इसे ईबीएस शेयर का उपयोग करके किया, एनएफएस के माध्यम से घुड़सवार (हमारा पूरा सेटअप एडब्ल्यूएस में है)। यह प्रक्रिया ठीक काम करती है।

समस्या कभी-कभी ईबीएस शेयर धीमा या डिस्कनेक्ट होता है। यह तब एक लहर प्रभाव का कारण बनता है, हमारे आंतरिक उपकरणों में इस फ़ाइल पर प्रक्रिया करने की प्रतीक्षा (जब तक आप नोटिस बंद नहीं करते)। मैंने कुछ धागे पढ़े हैं (जैसे this one) जो stream_set_timeout के बारे में बात करते हैं लेकिन यह स्पष्ट नहीं है कि आप फ़ाइल को लोड करने के साथ इसका उपयोग कैसे करेंगे (यह वास्तव में एक स्ट्रीम नहीं है) और मैं कोई उदाहरण नहीं ढूंढ पा रहा हूं।

यहाँ एक टुकड़ा आप एक विचार क्या PHP फ़ाइल

$file = '/ebs/path/to/image.png'; 
$newfile=false; 
if(!is_file($file)) $newfile=true; 
elseif(filemtime($file)+1800 < time()) { 
    $newfile=true; 
    unlink($file); 
} 
if(!$newfile){ 
    $i=imagecreatefrompng($file); 
    header('Content-Type: image/png'); 
    header('Expires: ' . gmdate('D, d M Y H:i:s', filemtime($file) + $timeout) . ' GMT'); 
    imagepng($i); 
    imagedestroy($i); 
    exit; 
} else { 
    // Build and output a new file here 
} 

कर रहा है मैं इस स्क्रिप्ट के लिए एक टाइमआउट कैसे बना सकते हैं देने के लिए है?

+0

मूल कारण यह है कि "ईबीएस धीमा या डिस्कनेक्ट हो गया है", इसलिए अंतिम समाधान इसे ठीक करना है। चाहे एडब्ल्यूएस कार्य पर निर्भर है, एक और सवाल है। –

उत्तर

4

यह प्रश्न के उत्तर की तुलना में समस्या का समाधान है, लेकिन कृपया iostat -x 1 के आउटपुट को पोस्ट करें जब सर्वर ठीक चल रहा है और जब फ़ाइल लोड होने में लंबा समय लगता है। मैंने पाया है कि जब avgqu-sz 30 से ऊपर चला जाता है, यहां तक ​​कि आईओपीएस-प्रावधान ड्राइव पर भी (हमारे 2000 आईओपीएस पर प्रावधान किए जाते हैं) तो ईबीएस क्रॉल में धीमा हो जाता है। समाधान यह है कि स्थिति को साफ़ होने तक इसे दूसरे या तीन के लिए पढ़ने या लिखने का प्रयास न करें।

इसके अलावा, मात्रा को क्लोन करने और मूल वॉल्यूम के स्थान पर क्लोन का उपयोग करने का प्रयास करें। मैंने पाया है कि कुछ एडब्ल्यूएस सिस्टम सिर्फ 'खराब' हैं और उन्हें प्रतिस्थापित करने की आवश्यकता है: यह ईसी 2 उदाहरणों, ईबीएस वॉल्यूम्स, आरडीएस सेवाओं और अन्य के लिए जाता है। संभवतः ऐसा तब होता है जब भाग्य आपको एक ऐसे उपयोगकर्ता के साथ वीएम चलाने वाले हार्डवेयर का उपयोग करने के लिए लाता है जो एक अच्छा पड़ोसी नहीं हो सकता है। बस संसाधन को क्लोन करना और इसे पुनरारंभ करना आम तौर पर इसे विभिन्न हार्डवेयर पर ले जाता है और इस तरह के मुद्दों को हल करता है।

संपादित करें: पढ़ें this great post कैसे iostat आउटपुट की व्याख्या करने, कैसे iostat EBS से संबंधित है पर जोर देने के साथ के बारे में। मैंने इसे एक अच्छा दर्जन बार पढ़ा है।

+0

मैंने इसे ऊपर उठाया (क्योंकि यह बहुत उपयोगी जानकारी है) और इसे बक्षीस दिया (केवल एकमात्र उत्तर सबमिट करने के लिए) लेकिन, जैसा कि कहा गया है, यह वास्तव में सवाल का जवाब नहीं देता है इसलिए मैंने इसे इस तरह ध्वजांकित नहीं किया। मैं अभी भी किसी को 'stream_set_timeout' समझाऊंगा देखना चाहता हूं। लेकिन फिर भी अच्छी जानकारी। – Machavity

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