Pewien serwer zaczął mulić
Siedząc rano w pracy, zacząłem sobie testować wydajność różnych serwerów (maszyn). Pobrałem aplikację Apache JMeter, przygotowałem testy i po prostu uruchomiłem. Chciałem zobaczyć jak maszyny zachowają się przy dużej liczbie prostych requestów HTTP.

W czasie testów zalogowałem się po SSH na każdy serwer i oglądałem co się tam dzieje. Na jednej z maszyn zobaczyłem niestety taki oto wpis:
Cpu(s): 6.1% us, 1.0% sy, 0.0% ni, 0.0% id, 92.5% wa, 0.2% hi, 0.2% si
92.5% czasu procesor czeka na IO. (wa: Time spent waiting for IO.). Czyli tak lakonicznie mówić procesor czeka na odczyt/zapis danych z dysku ( IO - Input/Output). Zaniepokoiło mnie to bardzo. Pewnie dysk sobie pada. Przy takim dużym IO od razu skoczył load na serwerze.
08:04:17 up 154 days, 14:27, 1 user, load average: 146.51, 125.66, 78.56
Te liczby są kosmiczne jak na maszynę o dwóch procesorach. Jest nieciekawie. Zatrzymałem test JMetera, gdyż serwer praktycznie już nie odpowiadał. Czas zacząć czytać logi. Zacząłem od pliku /var/log/messages. Tam znalazłem wpisy:
grep "smartd" /var/log/messages Jun 15 04:14:54 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 04:44:53 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 05:14:53 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 05:44:54 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 06:14:53 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 06:44:53 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 07:14:54 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 07:44:53 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 08:14:53 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors Jun 15 08:44:54 user smartd[3265]: Device: /dev/sda, 1 Currently unreadable (pending) sectors
Nie było ich tak dużo, więc nie jest źle. Kolejnym krokiem było oczywiście poczytanie informacji jakie zebrał S.M.A.R.T.. Wydałem polecenie /usr/sbin/smartctl /dev/sda -a, a następnie przyjrzałem się wynikom:
5 Reallocated_Sector_Ct 0x0033 253 253 010 Pre-fail Always - 0 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 1 198 Offline_Uncorrectable 0x0030 253 253 000 Old_age Offline - 0
Jak widać póki co nie ma żadnych wpisów w Reallocated_Sector_Ct co mnie ucieszyło. Każdy dysk ma pewną ilość sektorów fabrycznych zapasowych. W przypadku pojawienia się badsektorów, uszkodzony (nienaprawialny), taki sektor oznaczany jest jako BAD, a następnie zostaje zastąpiony wolnym sketorem z puli sektorów zapasowych. Jeśli skończy się pula wolnych sektorów zapasowych, wówczas pojawiają się błędy w smarcie. Wpisy w Reallocated_Sector_Ct świadczą o ilości przemapowanych sektorów. Natomiast Offline_Uncorrectable oznacza, że dany sektor jest uszkodzony i nie można go odczytać. Dane zapisane w nim sa zapewne utracone, ale wystarczy go zapisac i także zostanie zapewne przeniesiony w inne miejsce.
Kolejnym krokiem było przetestowanie wydajności dysków jakie są na serwerze - hdparm -tT /dev/sda. Ponieważ oba są takie same - spodziewałem się podobnych wyników...
/dev/sda: Timing cached reads: 1224 MB in 2.36 seconds = 518.94 MB/sec Timing buffered disk reads: 136 MB in 3.69 seconds = 36.81 MB/sec root@thecamels [/home/thecamel]# /sbin/hdparm -tT /dev/sdb /dev/sdb: Timing cached reads: 4364 MB in 2.00 seconds = 2180.15 MB/sec Timing buffered disk reads: 238 MB in 3.00 seconds = 79.24 MB/sec root@thecamels [/home/thecamel]# /sbin/hdparm -tT /dev/sdb
Okej... Widać różnice. Na koniec zostało mi odpalenie smartctl -t long /dev/sda i poczekanie na wyniki o 10:28:31.
smartctl version 5.33 [x86_64-redhat-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Extended self-test routine immediately in off-line mode". Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 125 minutes for test to complete. Test will complete after Sun Jun 15 10:28:31 2008 Use smartctl -X to abort test.
Zobaczymy co pokażą testy ;-) Oby było wszystko okej ;-)
15 czerwca 2008, 09:33:41
Komentarze
Wiesz co… Zapomniałem sprawdzić :]
Ale jak lukałem na inne serwery jakie mają moi znajomi to jest o wiele gorzej, więc generalnie póki co to stwierdzam, że działa ;]
Powered by Jogger. Copyright © 2002-2003 Justin Mecham & JabberPL Group
Licencja: Creative Commons Uznanie autorstwa 3.0





I gdzie dalszy ciąg ? Nie będzie happy endu ? :(