Losa utiliza 88 Gb de 128 Gb disponibles. Que podria causar esto?

8

Ejecutamos un debian 2.6.26-2-amd64 x86_64 GNU / Linux en un servidor con 128 Gb. Recientemente nuestra memoria disponible se volvió bastante baja. Mirar el / proc / meminfo mostró que la losa estaba usando 88Gb, que se cuenta en la memoria usada por supuesto.

  1. ¿Es esto un problema? Sospecho que la memoria se liberará cuando sea necesario, pero no sé si eso podría tener efectos secundarios no deseados.
  2. ¿Por qué necesitaría Slab tanta memoria? ¿Hay una causa clara para eso?
  3. ¿Podemos evitar que esto suceda en el futuro?
  4. ¿Cómo podemos liberar esta memoria?

gracias de antemano

> cat /proc/meminfo
MemTotal:     132304500 kB
MemFree:      26669388 kB
Buffers:        237504 kB
Cached:       11881136 kB
SwapCached:         48 kB
Active:        5244640 kB
Inactive:     11714308 kB
SwapTotal:     5751228 kB
SwapFree:      5750436 kB
Dirty:              24 kB
Writeback:           0 kB
AnonPages:     4840256 kB
Mapped:         163968 kB
Slab:         88314840 kB
SReclaimable: 88275644 kB
SUnreclaim:      39196 kB
PageTables:      80852 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
WritebackTmp:        0 kB
CommitLimit:  71903476 kB
Committed_AS:  6818332 kB
VmallocTotal: 34359738367 kB
VmallocUsed:    505724 kB
VmallocChunk: 34359231963 kB
Joris Meys
fuente

Respuestas:

5

¿Está absolutamente seguro de que se trata de un problema real: la RAM utilizada no es lo mismo que el RAM no disponible (consulte, por ejemplo, esta pregunta de ServerFault en free / buffers / cache ), el reflejo de querer tener la memoria listada como gratuita a menudo es incorrecto.

Slab no es una cosa específica, es uno de los asignadores de memoria dentro del kernel, en particular, permite que el kernel administre objetos que no tienen el tamaño de una página (como se señaló en otra parte / proc / slabinfo y slabtop deberían darle alguna indicación de a lo que se aferra actualmente). Puede encontrar más antecedentes sobre la losa aquí

Si ve el SReclaimable debajo de Slab, considera que casi toda la memoria asignada por slab puede recuperarse cuando sea necesario. Entonces, sí, la memoria se liberará cuando sea necesario. El costo incidental de reclamar está pagando algunos costos de contabilidad diferidos en ciclos de CPU.

No estoy seguro si la losa, estrictamente hablando, necesita toda esa memoria, en muchos casos retendrá objetos inicializados para su uso posterior (guardar la inicialización), algunos de ellos son varios cachés, la mayoría de estos son probablemente beneficiosos (es decir, efectos de cachés del sistema de archivos son inmensos).

Si desea controlar el comportamiento de vmm, consulte / proc / sys / vm , en particular min_slab_ratio podría ser de interés. También puede limitar las memorias caché de losas individuales a través de / proc / slabinfo (consulte el artículo ibm developerworks para obtener más detalles). Sin embargo, antes de comenzar a encender el vmm y la losa: descubra lo que realmente quiere lograr e investigue un poco sobre el vmm y cómo se puede ajustar para adaptarse a su (s) carga (s) de trabajo. Es bastante posible romper su sistema de manera sutil y espectacular jugando con los botones de ajuste vmm.

Kjetil Joergensen
fuente
muchas gracias por la respuesta en profundidad y los enlaces
Joris Meys
1
El enlace de IBM developerworks ya no funciona.
Ikke
11

Utilice la información de caché de losa del kernel de pantalla slabtop:

slabtop

También vea "vmstat -m":

vmstat  -m

y mira / proc / slabinfo:

cat /proc/slabinfo

Soltar caché para liberar memoria

sync; echo 3 > /proc/sys/vm/drop_caches
ooshro
fuente
Gracias a los comandos, hacen la vida un poco más fácil.
Joris Meys