Podivne zaseky - jak dal postupovat? [dlouhe]

Miroslav Prýmek m.prymek at gmail.com
Fri May 20 17:33:29 CEST 2016


Ahoj,

na jednom postarsim low end serveru (HP ML110 G5, 2G RAM) se mi
stala neprijemna vec - zasek procesu v D stavu po pokusu
o zapis na disk.

Necekam, ze bysme tady presne rozresili pricinu, spis bych vas chtel
poprosit o nazor, co byste v takove situaci delali. Sorry za delsi
post, uz tak jsem se snazil psat jenom to nejpodstatnejsi...

Situace je takova, ze na te lokaci je prehistoricky server obsluhujici
jenom 6 stanic (windows domena pres sambu, ldap, dhcp, apod.), ktery
jsem chtel nahradit tim zminenym serverem. Predpripraveny na nem bylo
FreeBSD 10.3-RELEASE, vsechno na ZFS nad dvema disky.
Pri nasazovani se ale server
choval podivne - prvne nekolikrat doslo k samovolnemu resetu. Prvne
byla na vine nejspis zavada na UPSce. Po jeji vymene ale doslo zase
k tomu zminenemu zaseku v D stavu.

Zjistena fakta:

-------------------
Zaseknute operace na jednom z disku:
# gstat -b
dT: 1.011s  w: 1.000s
  L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
     0      0      0      0    0.0      0      0    0.0    0.0  ada0
    12      0      0      0    0.0      0      0    0.0    0.0  ada1

Cteni z disku se potom taky zaseklo:
# dd if=/dev/ada1 of=/dev/null bs=1024k

Stejne cteni z druheho disku (ada0) probehlo v pohode.

zpool status nehlasil zadne problemy - ZFS se celkove tvarilo, ze je v
pohode, akorat ceka. A ceka neomezene dlouho... System reagoval,
slo spoustet kde co, ale to bylo mozna z cache nebo druheho - zdraveho - 
disku.

Poces, ktery se zrejme zasekl jako prvni, cekal na tomhle:
# procstat -kk 917
   PID    TID COMM             TDNAME           KSTACK 

   917 100480 python2.7        -                mi_switch+0xe1 
sleepq_wait+0x3a _cv_wait+0x17d zio_wait+0x5b 
dmu_buf_hold_array_by_dnode+0x1ec dmu_read_uio_dnode+0x41 
dmu_read_uio_dbuf+0x3b zfs_freebsd_read+0x3e3 VOP_READ_APV+0xa1 
vn_read+0x165 vn_io_fault+0x10b dofileread+0x95 kern_readv+0x68 
sys_read+0x63 amd64_syscall+0x40f Xfast_syscall+0xfb

Anebo to byl mozna tenhle:
# procstat -t 1673
   PID    TID COMM             TDNAME           CPU  PRI STATE   WCHAN
  1673 100458 python2.7        -                  3  152 sleep   db->db_c

Kazdopadne ostatni procesy v D stavu byly zasekle na zil_commit:

# procstat -kk 1720
   PID    TID COMM             TDNAME           KSTACK 

  1720 100495 bounce           -                mi_switch+0xe1 
sleepq_wait+0x3a _cv_wait+0x17d zil_commit+0x85 zfs_freebsd_fsync+0x9c 
VOP_FSYNC_APV+0xa7 sys_fsync+0x209 amd64_syscall+0x40f Xfast_syscall+0xfb

Na serveru zadne ZIL zarizeni neni, jenom dva disky v zfs mirroru.

No takze jsem logicky pojal podezreni, ze je to chyba disku.
Nekde jsem nacetl, ze ZFS ocekava, ze pripadne failne nizsi vrstva,
takze pokud k tomu nedojde, muze cekat naveky a neresi to.
Nekdo radil zkusit

# zpool set failmode=continue zroot

ale to se zaseklo taky (mozna by to mohlo pomoct, kdyby se to udelalo 
predem, nevim, netusim, nikdy jsem to nepotreboval a netestoval).

Stejne tak se zasekl pokus o vyhozeni disku z poolu. Ani na CAM urovni
se mi to nepodarilo:

# camcontrol eject ada1
Error received from stop unit command

Takze zbyla posledni sance ten disk natvrdo odpojit (porad za behu).
To probehlo v poradku, disk zmizel, dokonce z gstatu zmizely visici
operace, ale ne vsechny - misto tech 12 tam byla jedna :(

Takze nezbylo nez server natvrdo vypnout.

-------------------
Pokusy ex post

Takze jsem dosel k nazoru, ze chyba bude v disku. Jenze SMART nerikal
nic, offline test probehl bez chyby a jakekoli stresstesty jsem se
snazil na disku poustet, vsechno bylo uplne v pohode.

Jeste me napadlo, jestli by to nemohlo souviset s jinou veci - pri
pripojeni na tenhle server se mi obcas stavalo, ze jakoby na sekundu dve
zamrzl a pak jel v pohode dal. Nedoresil jsem, jestli to bylo sitovkou
nebo necim jinym. Bylo by mozny, ze by nejaka chyba v hw nebo v driveru
zpusobila nejake takove cekani, neco v diskovych operacich by spravne
nevytimeoutovalo a ZFS by se tim dostalo do vecneho cekani?! To asi
tezko zjistim :(

-------------------
Co ted?

Ted fakt nevim, co s tim dal :(

  - dost dobre nemuzu riskovat, ze se tohle bude se serverem stavat v
    ostrem nasazeni. Uz proto, ze to vyzaduje tvrdy reset na miste...

  - nedokazu nijak urcit, jestli chyba byla v disku, radici nebo necem
    jinem a jestli se bude opakovat

  - jak jsem psal, pred timhle incidentem sel server do tvrdeho resetu
    asi dvakrat. Mohlo to poskodit zpool tak, aby se choval takhle divne?
    Melo by smysl ho smazat a vytvorit znovu z ciste vody?!

  - 2GB RAM na ZFS je malo, ale zas ne tak malo, aby se stalo tohle (?)
    -> zkusit se ZFS vzdat a jet na tehle lokaci na UFS? (jinde mam ZFS,
    takze udrzovat jednu instalaci s UFS je opruz)

  - zkusit koupit nejaky PCIe SATA radic?

  - udelat nejake dalsi testy?

  - nebo se vykaslat na ozivovani tohodle stareho zeleza a radeji
    presvedcit zakaznika, at koupi novy server (a doufat, ze s nim
    zadne problemy nebudou)?

Nejak se nemuzu rozhodnot, jakou cestou jit - vsechny jsou docela
pracne a s nejistym vysledkem. Co byste doporucovali udelat?
(Vim, ze je to debilni otazka, ale jsem z toho fakt zoufalej, kazda
troska do mlyna by mi pomohla)

Diky predem za jakoukoli radu.


Mirek


More information about the Users-l mailing list