Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

421
Vistas
no se puede cambiar el tamaño de Postgres 10 /dev/shm debido a que Kubernetes limita la memoria compartida

Encontró el siguiente error al leer de una tabla PG 10 con 10 subprocesos paralelos: -

ERROR: no se pudo cambiar el tamaño del segmento de memoria compartida "/PostgreSQL.1110214013" a 3158016 bytes: no queda espacio en el dispositivo

Parece ser el resultado de que K8 limite el tamaño máximo de /dev/shm/ a 64 MB. Establecer este valor da como resultado un valor superior a 64 MB.

Las tareas de Spark llevan a cabo lecturas paralelas y se dividen en función del valor hash de una columna de identificación. Me pregunto si las particiones desequilibradas podrían estar causando que una tarea en particular exceda el valor de postgres work_mem para el proceso que causa una escritura en el disco.

Estoy viendo un registro de errores correspondiente para cada uno de mis subprocesos, por lo que este cambio de tamaño del segmento de memoria compartida se produce varias veces (presumiblemente, los cambios de tamaño solicitados superan los 64 MB bloqueados)

He intentado subir work_mem de 4 MB a 32 MB, 64 MB y finalmente a 256 MB, pero he visto el error en cada etapa. A continuación se muestra el conjunto completo de configuraciones de PG que creo que se pueden modificar para evitar el uso problemático del disco:

  • tamaño_caché_efectivo: "750 MB"
  • búfer_compartido: "2GB"
  • min_wal_size: "80 MB"
  • max_wal_size: "5GB"
  • work_mem: "4 MB, 32 MB, 64 MB, 128 MB, 256 MB" (todo probado)
  • random_page_cost: 4 (¿se pregunta si esta configuración podría ser útil?)
  • max_conexiones: 100

Tengo una posible solución alternativa que implica montar un directorio en /dev/shm/ pero preferiría evitar esta solución ya que no podría limitar el tamaño al que podría crecer el directorio, idealmente encontraría una solución que funcione con los 64 MB.

Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Parece que (según esta explicación ) si desea evitar el problema y dejar /dev/shm limitado a 64 MB, deberá configurar shared_buffers en menos de 64 MB. Sin embargo, montar un volumen emptyDir en /dev/shm es probablemente la mejor opción si hay más memoria físicamente disponible para su nodo de Kubernetes.

Es cierto que a partir de Kubernetes 1.21 no puede restringir el tamaño del volumen emptyDir (a menos que tenga acceso para configurar puertas de características: la nueva puerta de características SizeMemoryBackedVolumes todavía está en alfa ), pero esto probablemente no importe para el uso de Postgres caso.

Si Postgres es la única aplicación que se ejecuta en el pod y configuró shared_buffers en alrededor del 25 % de la memoria disponiblesegún lo recomendado por la documentación de Postgres , el comportamiento actual de ofrecer hasta el 50 % de la memoria del nodo al volumen emptyDir antes del desalojo debería estar bien. Necesitaría activar algún error en Postgres para que consuma mucha más memoria que la configuración de shared_buffers .

Por lo tanto, es probable que la mejor solución establezca shared_buffers en ~25 % de la memoria de nodo disponible y luego monte un volumen emptyDir en /dev/shm .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda