interhost

הבלוג
הכל על שרתים, תקשורת ולינוקס

ארכיון פוסטים מהחודש "אפריל, 2010"

בדיקת ביצועי דיסק בלינוקס

יום שבת, 17 באפריל, 2010

בפרק זה אראה לכם כיצד נוכל לבדוק את ביצועי הדיסק שלנו בשרת לינוקס וגם למצוא איזו אפליקציה מעמיסה על הדיסק בשרת. ראשית אציין שהבדיקה טובה ואמינה הן לשרת יעודי והן לשרת וירטואלי כאחד.

אתחיל עם רקע קצר, ביצועי דיסק נמדדים בכמה פרמטרים:
מהירות סיבוב (5400, 7200, 10k ו15k) סל"ד (סיבובים לדקה), הערך משפיע על מהירות חיפוש הנתונים בדיסק ומהירות הקריאה שלו (וגם קצת על הכתיבה).
הדיסק כשלעצמו יכול להיות מחובר דרך בקר IDE, SATA, SCSI או SAS, השוני ביניהם הוא במהירות עיבוד הנתונים והשאילתות בשניה. כיום הממשק SAS ידוע כחזק ביותר שמסוגל לעבד הכי הרבה נתונים בו זמנית ולכן הינו מתאים לעבודת שרתי חוות-שרתים ומשמש לרוב כדיסק למסדים נתונים או קבצי מדיה בשרתים.
העולם של היום שונה ממה שהיה פעם, פעם היה צורך בדיסק מהיר שיבצע שאילתה אחת בצורה מהירה ביותר וכיום יש צורך בהרבה שאילתות במקביל. ולכן תפקיד הI/O (Input/Output) שהוא בעצם הפרמטר שיקבע באיזו מהירות יגיעו הנתונים מהדיסק.

כאשר יש בקשה מאתר האינטרנט להורדת קובץ מסויים המעבד של השרת פונה ומבקש מהדיסק את הקובץ, הזמן שהמעבד מחכה לנתונים מהדיסק נקרא io wait או io time. ככל שממשק הדיסק טוב יותר והדיסק מהיר יותר כך הזמן יהיה נמוך יותר.
לכן דיסק SAS 15K כל כך יקר, כיוון שהוא דיסק גם מהיר וגם בעל תפוקת io גבוהה (ניתן לשפר את הביצועים עוד יותר כאשר עובדים עם מערך raid אך על כך נדון בפרק אחר).

כבר ראינו בפרקים הקודמים שניתן לברור את זמן הoi wait של השרת בעזרת פקודת vmstat בלינוקס. חשוב לציין שכיום הצוואר בקבוק היחידי שנותר בעולם השרתים הוא הדיסק, המעבדים מהירים, הזכרון מהיר ומה שנפגע ראשון לרוב המקרים בעומסים הוא הדיסק ולכן במקרה של עומס או פגיעה בביצועים דבר ראשון רצוי לבדוק את ביצועי הדיסק ולראות שהוא לא גורר אחריו את כל המערכת. תבינו, המעבד לא יכול להמשיך קדימה לפני שהדיסק הגיב ואז כל המערכת מחכה לנתונים מהדיסק שיש דרישה להורדת קובץ פשוט וכך הכל נתקע.

כיצד נבדוק את ניצולת כמות ה-io המקבלים של הדיסק שלנו ברגע נתן במערכת? נוכל להיעזר בפקודת  iostat על מנת להריץ את הפקודה יש צורך בהתקנת חבילת sysstat:

sysstat – sar, iostat and mpstat – system performance tools for Linux

התקנה:

apt-get install sysstat

הכלי עובד בצורה של אגירת נתונים וחישוב ממוצע, לכן נפעיל אותו לממוצא של 5 שניות שזה לדעתי הכי אופטימלי:

iostat -dx 5

אין להתייחס לפלט הראשון, הוא לא מדוייק.  הכלי יתן פלט עדכני כל 5 שניות ויש להתייחס לפלט השני והלאה:

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.28     7.18    0.63    4.14    19.82    90.55    23.14     0.01    1.43   0.31   0.15
sda1              0.25     7.08    0.62    4.13    19.53    89.70    22.99     0.01    1.41   0.31   0.15
sda2              0.00     0.00    0.00    0.00     0.00     0.00     2.00     0.00   16.00  16.00   0.00
sda5              0.03     0.09    0.01    0.01     0.28     0.84    61.91     0.00    5.88   1.31   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     3.60    0.00    2.40     0.00    48.00    20.00     0.00    0.00   0.00 0.00
sda1              0.00     3.60    0.00    2.40     0.00    48.00    20.00     0.00    0.00   0.00 0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda5              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

מסתכלים על העמודה האחרונה (%util) היא מציגה כמה io שמסוגל לתת הדיסק מנוצלים כרגע באחוזים. אם הערך גבוהה מ90% זה אומר שאנחנו בבעיה ויש פגיעה בביצועים של הדיסק והשרת.

כלי עזר נוסף הוא ה-iotop שמאפשר לנו לראות איזו אפליקציה מעמיסה הכי הרבה על הדיסק מבחינת ניצולת io, יש להתקין את הכלי iotop בדביאן זה נעשה פשוט ע"י שימוש במנהל החבילות:

apt-get install iotop

הפלט שמתקבל:

Total DISK READ: 0 B/s | Total DISK WRITE: 11.54 K/s
PID USR DISK READ DISK WRITE SWAPIN IO COMMAND
999 root           0 B/s    7.69 K/s  0.00 %  0.08 % [kjournald]
11209 www-data       0 B/s    3.85 K/s  0.00 %  0.00 % apache2 -k start

רואים את שני הערכים שצבעתי בכחול? הם נמצאים בראש הרשימה מה שאומר שהם "זוללי" הio, הטבלה בדומה לכלי top מתעדכנת אחת לשניה.

זה כלי ממש מצויין הוא יכול לעזור לנו למצוא תקלות וצווארי בקבוק בשרת בצורה מהירה,
אם מצאנו ב-systat שהדיסק מנוצל ב-70% ומעלה ואנחנו מנחשים שזה apache כנארה או mysql אבל רוצים לדעת בדיוק את מספר הפרוסס של אותו child של apache כדי שנוכל לדבג אותו ולמצוא לדוגמא את האתר הבעייתי בשרת באמצעות strace -p 11209 (פרטים נוספים בפרק הבא).