256GB मेम / 48 करोड़ के साथ लिनक्स - मशीन थ्रेशिंग / चोकिंग के साथ स्मृति के टन के साथ छोड़ना शुरू करती है


12

मशीन: डेल r815, CentOS 5.4, 256GB RAM, 4 x 12 करोड़।

हमारे पास एक एप्लीकेशन है जिसमें 275GB की फाइल है। यह एक समय में 20GB डेटा के स्थान पर सॉर्ट करता है अर्थात यह बिट्स को चारों ओर स्वैप करता है और उन्हें उसी फ़ाइल में बदल देता है। यह सब ठीक काम करता है।

एक अंतिम पास है जो तब पूरी फ़ाइल को पढ़ता है और विभिन्न 20GB चंक्स पर मर्ज करता है, और उन्हें एक पूरी नई फ़ाइल में आउटपुट करता है।

यह प्रक्रिया कुछ समय के लिए ठीक चलने की कोशिश करती है और डिस्क से लगभग 50GB फ्लश समाप्त हो जाती है। इसके कुछ समय बाद, WHOLE मशीन से आग लगने लगती है।

सरल कमांड जैसे ps -ef, ls -alलंबे समय तक लटका रहता है और 100% सीपीयू (जो सिर्फ एक कोर है) लेने के रूप में दिखाता है।

स्मृति आँकड़ों को topदेखते हुए , मैं देखता हूँ कि यह लगभग 120GB RAM (इसलिए 128GB मुफ्त) का उपयोग कर रहा है और "कैशेड" सेक्शन के तहत 120GB है।

क्या किसी ने इस तरह का व्यवहार पहले देखा है? एक ही प्रक्रिया 64GB मेमोरी वाली मशीन पर ठीक चलती है - इसलिए किसी तरह मुझे लगता है कि यह मशीन में मौजूद RAM के माउंट से संबंधित है।

(जैसा कि हम बोलते हैं, मैं इस मशीन पर सभी 64GB के साथ परीक्षण चला रहा हूं - एक हार्डवेयर मुद्दे को हटाने के लिए)।

मैं शायद कुछ vm params में याद कर रहा हूँ /etc/sysctrl.conf?

धन्यवाद!


डिस्क क्या कर रहे हैं .. क्या आप स्वैप नरक में जा रहे हैं ????
Arenstar

64 बिट कर्नेल / ऐप / आदि? आपने 100% सीपीयू का उल्लेख किया है, जब यह होता है तो लोड औसत क्या है, यह ऐप मल्टीथ्रेडेड है (यह सभी प्रोसेसर का उपयोग नहीं करेगा यदि नहीं), क्या vmstat 4 आपको बताता है (io / cpu विशेष रूप से)
coredump

इस तरह "पीएस" 100% cpu 4800% (क्योंकि 48 कोर) से बाहर है - इसलिए io या कुछ और द्वारा अवरुद्ध होने की संभावना है। बॉक्स पर लोड औसत केवल 5 की तरह है। डिस्क, जो कि ठोस अवस्था में हैं, बहुत कुछ नहीं देख रहे हैं ... ऐसा लगता है कि एक कर्नेल मुद्दे से अधिक है तो संसाधन
Aspitzer

मशीन अदला-बदली नहीं कर रही है।
Aspitzer

1
हाँ .. इसे 64gb के साथ अब चल रहा है। अगर यह मशीन में मेम की कुल राशि से संबंधित है, तो एक घंटे के भीतर पता होना चाहिए
एस्पिरिट

जवाबों:


12

आपके प्रश्न ने मुझे हाल ही में पढ़ी गई कुछ बातों की याद दिला दी:

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

यह पता करता है कि NUMA आर्किटेक्चर (जैसे कि आप कह सकते हैं कि, एक 48 कोर एएमडी सिस्टम) मेमोरी आवंटन और स्वैपिंग को प्रभावित करता है। मुझे नहीं पता कि यह वही है जो आप में चल रहे हैं, लेकिन यह पर्याप्त रूप से समान लग रहा है कि यह पढ़ने लायक हो सकता है।

यहां तक ​​कि अगर यह जवाब नहीं है यह आकर्षक पढ़ने के लिए बनाता है।


1
यह सवाल इस समस्या पर एक योग्य शॉट लगता है। और यह एक शानदार रीडिंग है।
coredump

1
यह एक महान पढ़ा है, और 4 कुर्सियां, 256 जीबी की रैम = 64 जीबी प्रति नोड है, और ऐसा प्रतीत होता है जहां आपको परेशानी हो रही है, जो दस्तावेज़ में स्थिति की बिल्कुल प्रतिकृति करता है।
मार्क हेंडरसन

12

तो यह 64 बिट Centos 5.4 और 64bit Fedora 14. में एक कर्नेल बग दिखाई दिया। मैं Centos 5.5 स्थापित करने के बाद, फिर समस्या दूर हो गई।

क्षमा करें, मेरे पास सभी के लिए बेहतर उत्तर नहीं है ...


1
अरे यार, अगर यही तय है, तो यही तय है। अपने आप को चेकमार्क दें, ताकि अन्य लोग आपकी कठिनाइयों से सीख सकें :-)
mfinni

0

आप यह निर्दिष्ट करने के लिए /etc/sysctl.conf में एक पंक्ति जोड़ने का प्रयास कर सकते हैं कि स्वैप का उपयोग केवल तभी किया जाना चाहिए जब बिल्कुल आवश्यक हो।

swappiness = 0

आप पहले से ही जानते होंगे कि यह फ़ाइल वैश्विक सेटिंग्स को परिभाषित करती है, इसलिए पर्यावरण में चल रहे बाकी अनुप्रयोगों पर इस परिवर्तन के प्रभाव पर विचार करने की आवश्यकता है।


यह पहले से ही सेट है ... लेकिन जैसा कि मैंने उल्लेख किया है, 128 जीबी मुफ्त है - इसलिए यह किसी भी स्वैप मुद्दों को मार नहीं रहा है।
एस्पिरिट

0

आपका अस्थायी स्थान कहां है अक्सर यह टेम्पों पर होता है। Tempfs इसे स्वैप स्पेस द्वारा बैकअप की गई मेमोरी से स्पेस देता है, इसलिए यदि आप tempfs में बहुत अधिक सामान के साथ समाप्त होते हैं तो यह स्वैप I / O को ट्रिगर करेगा।

जब आप विलय कर रहे होते हैं, तो उसके आकार को देखते हुए, जब आप अंतिम मर्ज मारते हैं, तो मैं स्वैग्‍पन की अपेक्षा करता हूं।

कई डिस्क पर अपना स्वैप स्टोरेज फैलाने से मदद मिल सकती है।


0

हालांकि आप स्वैप नहीं मार सकते हैं, फिर भी आप I / O बाध्य हो सकते हैं। Ls जानकारी यह बताती है।

मैं dstat -dfडिस्क आँकड़ों को दिखाने के आउटपुट पर नज़र डालूंगा, या dstat -af(हाँ, यह एक बिलियन कॉलम चौड़ा होगा; यह तब होता है जब आपके पास 48 कोर होते हैं और उन सभी पर सीपीयू उपयोग दिखाते हैं) यदि आप यह सब देखना चाहते हैं।

मुझे आश्चर्य होगा कि यदि सभी सीपीयू व्यस्त थे (मर्ज सॉर्टिंग एक सीपीयू गहन कार्य नहीं है), लेकिन आप अपने आई / ओ सिस्टम के बारे में कुछ नहीं कहते हैं। यदि आपके पास कुछ डिस्क और फ़ाइलों का एक गुच्छा है, तो आप मर्ज को फीड किए जाने के लिए डिस्क को प्रत्येक फ़ाइल के लिए करना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.