Acceso lento al sistema de archivos

10

Estoy tratando de diagnosticar un problema de sistema de archivos lento en un servidor que cuido. Ha estado en marcha durante bastante tiempo, y me he quedado sin ideas sobre lo que puedo intentar. Aquí está el grueso de esto.

El servidor en sí es un Dell Poweredge T310. Tiene 4 discos duros SAS, configurados en RAID5 y ejecuta Citrix XenServer 5.6. La VM es una instalación (relativamente) antigua de Debian 5.0.6. Tiene 4 núcleos y 4 Gb de RAM. Cuenta con 3 volúmenes. Un volumen de 10 Gb (ext3) para el sistema, un volumen de 980 Gb (xfs) para datos (~ 94% lleno) y otro volumen de 200 Gb (xfs) para datos (~ 13% lleno).

Ahora aquí está lo extraño. El acceso de lectura / escritura al volumen de 980 Gb es realmente lento. Podría obtener 5Mb / s si tengo suerte. Al principio pensé que en realidad era acceso a disco en el sistema, o en un nivel de hipervisor, pero lo descarté por completo ya que otras máquinas virtuales en el mismo host están funcionando perfectamente bien (un buen par de cientos de Mb / s de acceso r / w de disco). Entonces comencé a apuntar a esta máquina virtual en particular. Empecé a pensar que era XFS, pero para demostrarlo no iba a intentar cambiar el sistema de archivos en el disco de 980 Gb, con años y años de miles de millones de archivos allí. Así que aprovisioné el disco de 200 Gb, e hice la misma prueba de lectura / escritura (básicamente dd), y obtuve unos buenos cientos de Mb / sr / w de acceso. Eso descartó la VM, el hardware y el tipo de sistema de archivos.

También hay muchos de estos en /var/log/kern.log; (lo siento, esto es bastante largo)

Sep  4 10:16:59 uriel kernel: [32571790.564689] httpd: page allocation failure. order:5, mode:0x4020
Sep  4 10:16:59 uriel kernel: [32571790.564693] Pid: 7318, comm: httpd Not tainted 2.6.32-4-686-bigmem #1
Sep  4 10:16:59 uriel kernel: [32571790.564696] Call Trace:
Sep  4 10:16:59 uriel kernel: [32571790.564705]  [<c1092a4d>] ? __alloc_pages_nodemask+0x476/0x4e0
Sep  4 10:16:59 uriel kernel: [32571790.564711]  [<c1092ac3>] ? __get_free_pages+0xc/0x17
Sep  4 10:16:59 uriel kernel: [32571790.564716]  [<c10b632e>] ? __kmalloc+0x30/0x128
Sep  4 10:16:59 uriel kernel: [32571790.564722]  [<c11dd774>] ? pskb_expand_head+0x4f/0x157
Sep  4 10:16:59 uriel kernel: [32571790.564727]  [<c11ddbbf>] ? __pskb_pull_tail+0x41/0x1fb
Sep  4 10:16:59 uriel kernel: [32571790.564732]  [<c11e4882>] ? dev_queue_xmit+0xe4/0x38e
Sep  4 10:16:59 uriel kernel: [32571790.564738]  [<c1205902>] ? ip_finish_output+0x0/0x5c
Sep  4 10:16:59 uriel kernel: [32571790.564742]  [<c12058c7>] ? ip_finish_output2+0x187/0x1c2
Sep  4 10:16:59 uriel kernel: [32571790.564747]  [<c1204dc8>] ? ip_local_out+0x15/0x17
Sep  4 10:16:59 uriel kernel: [32571790.564751]  [<c12055a9>] ? ip_queue_xmit+0x31e/0x379
Sep  4 10:16:59 uriel kernel: [32571790.564758]  [<c1279a90>] ? _spin_lock_bh+0x8/0x1e
Sep  4 10:16:59 uriel kernel: [32571790.564767]  [<eda15a8d>] ? __nf_ct_refresh_acct+0x66/0xa4 [nf_conntrack]
Sep  4 10:16:59 uriel kernel: [32571790.564773]  [<c103bf42>] ? _local_bh_enable_ip+0x16/0x6e
Sep  4 10:16:59 uriel kernel: [32571790.564779]  [<c1214593>] ? tcp_transmit_skb+0x595/0x5cc
Sep  4 10:16:59 uriel kernel: [32571790.564785]  [<c1005c4f>] ? xen_restore_fl_direct_end+0x0/0x1
Sep  4 10:16:59 uriel kernel: [32571790.564791]  [<c12165ea>] ? tcp_write_xmit+0x7a3/0x874
Sep  4 10:16:59 uriel kernel: [32571790.564796]  [<c121203a>] ? tcp_ack+0x1611/0x1802
Sep  4 10:16:59 uriel kernel: [32571790.564801]  [<c10055ec>] ? xen_force_evtchn_callback+0xc/0x10
Sep  4 10:16:59 uriel kernel: [32571790.564806]  [<c121392f>] ? tcp_established_options+0x1d/0x8b
Sep  4 10:16:59 uriel kernel: [32571790.564811]  [<c1213be4>] ? tcp_current_mss+0x38/0x53
Sep  4 10:16:59 uriel kernel: [32571790.564816]  [<c1216701>] ? __tcp_push_pending_frames+0x1e/0x50
Sep  4 10:16:59 uriel kernel: [32571790.564821]  [<c1212246>] ? tcp_data_snd_check+0x1b/0xd2
Sep  4 10:16:59 uriel kernel: [32571790.564825]  [<c1212de3>] ? tcp_rcv_established+0x5d0/0x626
Sep  4 10:16:59 uriel kernel: [32571790.564831]  [<c121902c>] ? tcp_v4_do_rcv+0x15f/0x2cf
Sep  4 10:16:59 uriel kernel: [32571790.564835]  [<c1219561>] ? tcp_v4_rcv+0x3c5/0x5c0
Sep  4 10:16:59 uriel kernel: [32571790.564841]  [<c120197e>] ? ip_local_deliver_finish+0x10c/0x18c
Sep  4 10:16:59 uriel kernel: [32571790.564846]  [<c12015a4>] ? ip_rcv_finish+0x2c4/0x2d8
Sep  4 10:16:59 uriel kernel: [32571790.564852]  [<c11e3b71>] ? netif_receive_skb+0x3bb/0x3d6
Sep  4 10:16:59 uriel kernel: [32571790.564864]  [<ed823efc>] ? xennet_poll+0x9b8/0xafc [xen_netfront]
Sep  4 10:16:59 uriel kernel: [32571790.564869]  [<c11e40ee>] ? net_rx_action+0x96/0x194
Sep  4 10:16:59 uriel kernel: [32571790.564874]  [<c103bd4c>] ? __do_softirq+0xaa/0x151
Sep  4 10:16:59 uriel kernel: [32571790.564878]  [<c103be24>] ? do_softirq+0x31/0x3c
Sep  4 10:16:59 uriel kernel: [32571790.564883]  [<c103befa>] ? irq_exit+0x26/0x58
Sep  4 10:16:59 uriel kernel: [32571790.564890]  [<c118ff9f>] ? xen_evtchn_do_upcall+0x12c/0x13e
Sep  4 10:16:59 uriel kernel: [32571790.564896]  [<c1008c3f>] ? xen_do_upcall+0x7/0xc
Sep  4 10:16:59 uriel kernel: [32571790.564899] Mem-Info:
Sep  4 10:16:59 uriel kernel: [32571790.564902] DMA per-cpu:
Sep  4 10:16:59 uriel kernel: [32571790.564905] CPU    0: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564908] CPU    1: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564911] CPU    2: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564914] CPU    3: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564916] Normal per-cpu:
Sep  4 10:16:59 uriel kernel: [32571790.564919] CPU    0: hi:  186, btch:  31 usd: 175
Sep  4 10:16:59 uriel kernel: [32571790.564922] CPU    1: hi:  186, btch:  31 usd: 165
Sep  4 10:16:59 uriel kernel: [32571790.564925] CPU    2: hi:  186, btch:  31 usd:  30
Sep  4 10:16:59 uriel kernel: [32571790.564928] CPU    3: hi:  186, btch:  31 usd: 140
Sep  4 10:16:59 uriel kernel: [32571790.564931] HighMem per-cpu:
Sep  4 10:16:59 uriel kernel: [32571790.564933] CPU    0: hi:  186, btch:  31 usd: 159
Sep  4 10:16:59 uriel kernel: [32571790.564936] CPU    1: hi:  186, btch:  31 usd:  22
Sep  4 10:16:59 uriel kernel: [32571790.564939] CPU    2: hi:  186, btch:  31 usd:  24
Sep  4 10:16:59 uriel kernel: [32571790.564942] CPU    3: hi:  186, btch:  31 usd:  13
Sep  4 10:16:59 uriel kernel: [32571790.564947] active_anon:485974 inactive_anon:121138 isolated_anon:0
Sep  4 10:16:59 uriel kernel: [32571790.564948]  active_file:75215 inactive_file:79510 isolated_file:0
Sep  4 10:16:59 uriel kernel: [32571790.564949]  unevictable:0 dirty:516 writeback:15 unstable:0
Sep  4 10:16:59 uriel kernel: [32571790.564950]  free:230770 slab_reclaimable:36661 slab_unreclaimable:21249
Sep  4 10:16:59 uriel kernel: [32571790.564952]  mapped:20016 shmem:29450 pagetables:5600 bounce:0
Sep  4 10:16:59 uriel kernel: [32571790.564958] DMA free:2884kB min:72kB low:88kB high:108kB active_anon:0kB inactive_anon:0kB active_file:5692kB inactive_file:724kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15872kB mlocked:0kB dirty:8kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:5112kB slab_unreclaimable:156kB kernel_stack:56kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
Sep  4 10:16:59 uriel kernel: [32571790.564964] lowmem_reserve[]: 0 698 4143 4143
Sep  4 10:16:59 uriel kernel: [32571790.564977] Normal free:143468kB min:3344kB low:4180kB high:5016kB active_anon:56kB inactive_anon:2068kB active_file:131812kB inactive_file:131728kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:715256kB mlocked:0kB dirty:156kB writeback:0kB mapped:308kB shmem:4kB slab_reclaimable:141532kB slab_unreclaimable:84840kB kernel_stack:1928kB pagetables:22400kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
Sep  4 10:16:59 uriel kernel: [32571790.564983] lowmem_reserve[]: 0 0 27559 27559
Sep  4 10:16:59 uriel kernel: [32571790.564995] HighMem free:776728kB min:512kB low:4636kB high:8760kB active_anon:1943840kB inactive_anon:482484kB active_file:163356kB inactive_file:185588kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:3527556kB mlocked:0kB dirty:1900kB writeback:60kB mapped:79756kB shmem:117796kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
Sep  4 10:16:59 uriel kernel: [32571790.565001] lowmem_reserve[]: 0 0 0 0
Sep  4 10:16:59 uriel kernel: [32571790.565011] DMA: 385*4kB 16*8kB 3*16kB 9*32kB 6*64kB 2*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2900kB
Sep  4 10:16:59 uriel kernel: [32571790.565032] Normal: 21505*4kB 6508*8kB 273*16kB 24*32kB 3*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 143412kB
Sep  4 10:16:59 uriel kernel: [32571790.565054] HighMem: 949*4kB 8859*8kB 7063*16kB 6186*32kB 4631*64kB 727*128kB 6*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 776604kB
Sep  4 10:16:59 uriel kernel: [32571790.565076] 198980 total pagecache pages
Sep  4 10:16:59 uriel kernel: [32571790.565079] 14850 pages in swap cache
Sep  4 10:16:59 uriel kernel: [32571790.565082] Swap cache stats: add 2556273, delete 2541423, find 82961339/83153719
Sep  4 10:16:59 uriel kernel: [32571790.565085] Free swap  = 250592kB
Sep  4 10:16:59 uriel kernel: [32571790.565087] Total swap = 385520kB
Sep  4 10:16:59 uriel kernel: [32571790.575454] 1073152 pages RAM
Sep  4 10:16:59 uriel kernel: [32571790.575458] 888834 pages HighMem
Sep  4 10:16:59 uriel kernel: [32571790.575461] 11344 pages reserved
Sep  4 10:16:59 uriel kernel: [32571790.575463] 1090481 pages shared
Sep  4 10:16:59 uriel kernel: [32571790.575465] 737188 pages non-shared

Ahora, no tengo idea de lo que esto significa. Hay mucha memoria libre;

             total       used       free     shared    buffers     cached
Mem:       4247232    3455904     791328          0       5348     736412
-/+ buffers/cache:    2714144    1533088
Swap:       385520     131004     254516

Aunque ahora veo que el intercambio es de tamaño relativamente bajo, ¿eso sería importante?

He comenzado a pensar en la fragmentación, o el uso de inodo en esa gran partición, pero un fsck reciente mostró que solo tiene una fragmentación del 0,5%. Lo que me deja con el uso de inodo, pero ¿qué efecto tendría realmente una gran tabla de inodo o TOC de sistema de archivos?

Me encanta escuchar las opiniones de la gente sobre esto. Me está volviendo al baño!

df -h salida;

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            9.5G  6.6G  2.4G  74% /
tmpfs                 2.1G     0  2.1G   0% /lib/init/rw
udev                   10M  520K  9.5M   6% /dev
tmpfs                 2.1G     0  2.1G   0% /dev/shm
/dev/xvdb             980G  921G   59G  94% /data

salida xfs_db;

# xfs_db -r -c frag /dev/xvdb
actual 15687263, ideal 15385050, fragmentation factor 1.93%
dannosaur
fuente
¿Es este un Debian de 32 bits?
Janne Pikkarainen
sí lo es. usando un núcleo "bigmem".
dannosaur
¿Cuál es la salida de df -h?
ewwhite
Sí, continúe y verifique el factor de fragmentación del /dev/xvdbsistema de archivos.
ewwhite
edición posterior con salida xfs_db. 1.93%. no tan mal seguro?
dannosaur

Respuestas:

4

Todavía podría ser el sistema de archivos XFS en este caso. Puede tener grandes problemas de fragmentación, así como la desaceleración que viene con un sistema de archivos casi completo. Podría beneficiarse de más espacio en cualquier caso.

Verifique la fragmentación del sistema de archivos XFS. Puedes hacer esto con el xfs_dbcomando. Si el sistema de archivos es /dev/sdb1, por ejemplo, su comando se vería así:

xfs_db -r -c frag /dev/sdb1

Eso generará un factor de fragmentación:

actual 66524, ideal 55966, fragmentation factor 15.87%

Puede ejecutar la utilidad de desfragmentación en línea xfs_fsr -v, en una screensesión para intentar corregir esto. Por defecto, el comando se ejecuta durante 2 horas o TEN pasa en el sistema de archivos. Puede que tenga que ejecutarlo varias veces. Verifique el factor de fragmentación entre ejecuciones.

ewwhite
fuente
2

A los sistemas de archivos Unix no les gusta estar llenos. Intenta hacer crecer el lento sistema de archivos. Si eso no es posible, intente desfragmentarlo usando xfs_fsr

ptman
fuente
0

Hay dos herramientas que puede usar para ver qué está sucediendo en su servidor. iostat e iotop , lo ayudarán a localizar el problema.

Si desea reasignar dos prioridades que diferentes procesos tienen en su servidor en relación con IO, puede usar ionice . Esto podría ser suficiente para solucionar sus problemas, pero probablemente sea una solución temporal. Es posible que desee buscar diferentes ubicaciones de almacenamiento o asignación de recursos para su servidor.

iostat
Iostat se puede utilizar para identificar qué dispositivos de almacenamiento / memoria están ralentizando su servidor. Tiene algunas buenas estadísticas iowait. Una vez que sepa qué dispositivo está ralentizando las cosas, puede tener una idea mucho mejor de dónde enfocar su atención.

$ iostat
Linux 3.2.0-30-generic (aaron-laptop) 09/11/2012 _x86_64_ (4 CPU)

avg-cpu:% user% nice% system% iowait% steal% inactivo
           5,83 0,07 3,00 1,81 0,00 89,29

Dispositivo: tps kB_read / s kB_wrtn / s kB_read kB_wrtn
sda 20,64 231,97 76,26 1290702 424315

iotop
es ideal para identificar qué procesos están esperando más tiempo para que IO termine, o son los más intensivos.

DISCO TOTAL LEÍDO: 0.00 B / s | ESCRITURA TOTAL DEL DISCO: 9.89 K / s
  TID PRIO USUARIO DISCO LEER DISCO ESCRIBIR SWAPIN IO> MANDO          
  349 be / 3 raíz 0.00 B / s 1012.49 B / s 0.00% 1.79% [jbd2 / sda3-8]
    1 be / 4 raíz 0.00 B / s 0.00 B / s 0.00% 0.00% init
    2 be / 4 raíz 0.00 B / s 0.00 B / s 0.00% 0.00% [kthreadd]
    3 be / 4 raíz 0.00 B / s 0.00 B / s 0.00% 0.00% [ksoftirqd / 0]

ionice

 ionice - ayuda

ionice: establece u obtiene la clase y prioridad de la programación del proceso.

Uso:
  ionice [OPCIÓN] -p PID [PID ...]
  IONICE [OPCIÓN] MANDO

Opciones:
  -c, --nombre o número de clase de programación de clase
                           0: ninguno, 1: tiempo real, 2: mejor esfuerzo, 3: inactivo
  -n, --classdata datos de clase de programación
                           0-7 para clases en tiempo real y mejor esfuerzo
  -p, --pid = Ver PID o modificar el proceso que ya se está ejecutando
  -t, - ignorar ignorar fallas
  -V, información de versión de salida de versión y salir
  -h, - ayuda a mostrar esta ayuda y salir

nelaaro
fuente