उच्च सर्वर लोड - 99.99% IO का उपयोग करते हुए [jbd2 / md1-8]


12

मैं पिछले हफ्ते से अधिक लोड कर रहा हूँ। यह आमतौर पर दिन में एक या दो बार होता है। मैं iotop से पहचानने में कामयाब रहा कि [jbd2 / md1-8] 99.99% IO का उपयोग कर रहा है। उच्च लोड समय के दौरान सर्वर पर कोई उच्च यातायात नहीं है।

सर्वर चश्मा हैं:

  • AMD Opteron 8 कोर
  • 16 जीबी रैम
  • 2x2.000 GB 7.200 RPM HDD सॉफ्टवेयर छाप 1
  • Cloudlinux + Cpanel
  • मैसिकल ठीक से ट्यून किया गया है

स्पाइक्स के अलावा, लोड आमतौर पर लगभग 0.80 है।

मैंने चारों ओर खोज की है, लेकिन वास्तव में क्या [jbd2 / md1-8] नहीं मिल रहा है। किसी को भी यह समस्या है या किसी को भी एक संभव समाधान पता है?

धन्यवाद।

अपडेट करें:

TIME        TID     PRIO     USER    DISK READ    DISK WRITE    SWAPIN  IO       COMMAND
16:05:36     399     be/3    root    0.00 B/s      38.76 K/s    0.00 %  99.99 %  [jbd2/md1-8]

1
en.wikipedia.org/wiki/Journaling_block_device & linux.die.net/man/4/md इस सॉफ़्टवेयर RAID संबंधित होने के लिए इंगित करता है।
mbrownnyc

आपके जवाब के लिए धन्यवाद। कुछ खुदाई करने के बाद मैंने पाया कि यह सॉफ्टवेयर से संबंधित है RAID। क्या आप इसका कोई समाधान जानते हैं? लगभग 3 महीने तक बिना किसी समस्या के बस एक हफ्ते पहले यह अजीब बात होने लगी।
एलेक्स

आपने IO का निर्धारण 99.99% कैसे किया? क्या आपने उपयोग किया iostat? क्या आप कुछ के iostat 5लिए (कहते हैं ) थोड़ा सा चला सकते हैं और आउटपुट साझा कर सकते हैं?
SLM

मैंने iotop के लिए लॉगिंग को सक्षम किया और लोड होने वाले अंतराल के लिए लॉग को देखा। अब लोड कम है इसलिए इसे चलाने का कोई मतलब नहीं है, लेकिन अगली बार ऐसा होने पर मैं इसे करूंगा। आपके जवाब के लिए धन्यवाद।
एलेक्स

1
मैं बस इस सटीक मुद्दे में भाग गया। आपका अंतिम समाधान क्या हो रहा है?
शैतानिकप्‍पी

जवाबों:


18

यह वास्तव में एक उत्तर नहीं है क्योंकि सटीक कारण देने के लिए पर्याप्त संदर्भ नहीं है, लेकिन यह एक विवरण है कि जब मैं मेरे साथ हुआ तो मैंने इसे कैसे ट्रैक किया।

मैंने देखा कि मेरे jbd2/md0-8शीर्ष पर दिखा रहा है iotop। मैंने /sys/kernel/debug/tracing/events/jbd2यह देखने के लिए देखा कि क्या करने के लिए क्या विकल्प jbd2हैं।

नोट -1: डिबग ट्रेसिंग ईवेंट के लिए आउटपुट देखने के लिए cat /sys/kernel/debug/tracing/trace_pipe- मैंने इसे ट्रेस को सक्षम / अक्षम करते हुए टर्मिनल में चलाया था।

नोट -2: ट्रेसिंग उपयोग के लिए ईवेंट सक्षम करने के लिए जैसे echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable। अक्षम करना echo 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable

मैंने सक्षम करके शुरू किया /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable- लेकिन ऐसा कुछ भी नहीं था जो इसके लिए आउटपुट में विशेष रूप से दिलचस्प लग रहा था। मैंने ट्रेस करने के लिए कुछ अन्य घटनाओं की कोशिश की और जब मैंने सक्षम किया तो /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enableमैंने देखा कि यह हर सेकंड हो रहा था:

# cat /sys/kernel/debug/tracing/trace_pipe
...
jbd2/md0-8-2520  [004] .... 658660.216492: jbd2_commit_flushing: dev 9,0 transaction 32856413 sync 0
jbd2/md0-8-2520  [001] .... 658661.334900: jbd2_commit_flushing: dev 9,0 transaction 32856414 sync 0
jbd2/md0-8-2520  [001] .... 658661.394113: jbd2_commit_flushing: dev 9,0 transaction 32856415 sync 0

ऐसा लग रहा था कि यह sync(2)/ fsync(2)/ से संबंधित है msync(2), इसलिए मैंने इसे किसी प्रक्रिया से जोड़ने के लिए कोई रास्ता खोजा और यह पाया:

# find /sys/kernel/debug/tracing/events/ | grep sync.*enable
...
/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable
...

जब मैंने इसे सक्षम किया तो मैंने निम्न आउटपुट देखा:

# cat /sys/kernel/debug/tracing/trace_pipe
...
      nzbget-17367 [002] .... 658693.222288: ext4_sync_file_enter: dev 9,0 ino 301924373 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [001] .... 658693.284080: jbd2_commit_flushing: dev 9,0 transaction 32856465 sync 0
      nzbget-17367 [000] .... 658693.334267: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658693.334275: jbd2_commit_flushing: dev 9,0 transaction 32856466 sync 0
      nzbget-17367 [001] .... 658694.369514: ext4_sync_file_enter: dev 9,0 ino 301924367 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.414861: jbd2_commit_flushing: dev 9,0 transaction 32856467 sync 0
      nzbget-17367 [001] .... 658694.470872: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.470880: jbd2_commit_flushing: dev 9,0 transaction 32856468 sync 0

इसने मुझे प्रक्रिया का नाम / आईडी दिया - और इस प्रक्रिया के कुछ और डिबगिंग करने के बाद ( nzbget) मुझे पता चला कि यह fsync(2)हर सेकंड कर रहा था । जब मैंने इसका कॉन्फिगरेशन बदल दिया ( FlushQueue=no, अनकम्फर्टेड आई थिंक, इसे सोर्स में पाया गया) इसे प्रति सेकेंड करने से रोकने के लिए यह fsync(2)समस्या चली गई।

मेरा कर्नेल संस्करण है। 4.4.6-gentooमुझे लगता है कि इन घटनाओं के साथ make oldconfigप्राप्त करने के लिए कर्नेल विन्यास के कुछ बिंदु पर मैंने (या तो मैन्युअल रूप से या साथ में ) कुछ विकल्प चुने थे /sys/kernel/debug- इसलिए यदि आपके पास ऐसा नहीं है तो सक्षम करने के बारे में अधिक जानकारी के लिए इंटरनेट पर बस देखें। यह।


अच्छी नींद आती है। यह बहुत मददगार है।
jdhildeb

सभी प्रक्रिया का विवरण देने के लिए बहुत बहुत धन्यवाद!
खगोलविज्ञानी

1

यह एक पत्रिका अद्यतन से संबंधित बात लगती है। कितने सॉफ्टवेयर हैं RAID RAID से बना है। क्या आप मुझे इसे बनाने के लिए इस्तेमाल की गई कमांड दिखा सकते हैं।

क्या आप डंप 2 पीएफ आउटपुट को भी पास्बीबिन कर सकते हैं। सबसे पहले, भौतिक डिवाइस की पहचान करें जहां आप लोड देखते हैं। यह जानने के लिए df का उपयोग करें। फिर,

dumpe2fs /dev/sdaX > /tmp/dump

आपके मामले के लिए, यह / देव / md0 हो सकता है।

इसे भी चलाइए।

iostat -xdk 1 25

उच्च IO मुद्दे के समय।

मुझे क्लाउडलिनक्स का पता नहीं है, लेकिन क्या इसके तहत उपलब्ध टूल ब्लेकट्रेस है।


हाय सोहम, आपके उत्तर के लिए धन्यवाद। सरणी में 2 डिस्क हैं। जैसा कि आप मुझे चलाने के लिए चाहते हैं तो आप मुझे पूर्ण कमांड दे सकते हैं। मदद के लिए धन्यवाद।
एलेक्स

एलेक्स, जवाब संपादित किया।
सोहम चक्रवर्ती

टोपी को कभी न भूलें यह वास्तव में डिस्क से कोई मध्य perforamnce सेटअप नहीं है - "वर्कस्टेशन के रूप में धीमा" इसे अधिक वर्णन करता है।
टॉमटॉम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.