Segmentation fault (core dumped)

image 18

«Fallo de segmentación» significa que ha intentado acceder a una memoria a la que no tiene acceso. Si recibe este error al ejecutar un script en Python en una maquina Linux , significa que el intérprete de Python se ha bloqueado. Sólo hay unas pocas razones por las que esto puede suceder:

  • Está usando un módulo de extensión de terceros escrito en C, y ese módulo de extensión ha fallado.
  • Está (directa o indirectamente) usando el módulo incorporado ctypes, y llamando a código externo que falla.
  • Hay algo mal en su instalación de Python.
  • Ha descubierto un bug en Python que debería reportar.

La primera es, con mucho, la más común. Si su código maneja una instancia de algún objeto de algún módulo de extensión de terceros, puede que quiera mirar la documentación. A menudo, cuando los módulos C se bloquean, es porque estás haciendo algo que no es válido, o al menos poco común y no probado. Pero si es su «fallo» en ese sentido o no – eso no importa. El módulo debería lanzar una excepción Python que pueda depurar, en lugar de bloquearse. Por lo tanto, probablemente debería informar de un error a quien escribió la extensión. Pero mientras tanto, en lugar de esperar meses a que se solucione el error y salga una nueva versión, tiene que averiguar qué hizo que provocó el fallo, y si hay alguna manera diferente de hacer lo que quiere o cambiar a otra biblioteca.

Por otro lado, dado que estás leyendo e imprimiendo datos desde otro lugar, es posible que su intérprete de Python sólo leyera la línea «Segmentation fault (core dumped)» e imprimiera fielmente lo que leyó. En ese caso, algún otro programa aguas arriba presumiblemente se estrelló. (Incluso es posible que nadie se haya bloqueado: si obtuviera esta página de la web y la imprimiera, obtendría la misma línea, ¿verdad?) .

Si no está seguro de cuál es el caso (y no quiere aprender a hacer gestión de procesos, inspección de core-files o depuración a nivel de C hoy mismo), hay una forma fácil de probarlo: después de la línea print añada una línea que diga print «Y estoy bien». Si ve eso después de la línea de fallo de segmentación, entonces Python no se estrelló, alguien más lo hizo. Si no lo ve, entonces probablemente es Python el que se ha colgado.

Una opción que puede ayudar para evitar errores de memoria insuficiente en aplicaciones es agregar mas espacio de intercambio a su servidor ( o swapping).

El Swap es una porción de almacenamiento de las unidades de disco duro que se reserva para el sistema operativo, a fin de almacenar de forma temporal datos que ya no es posible contener en la memoria RAM. Esto le permite aumentar la cantidad de información que su servidor puede conservar en su memoria funcional, con algunas advertencias. El espacio de intercambio en el disco duro se utilizará principalmente cuando ya no haya espacio suficiente en la RAM para mantener datos de aplicación en uso.

La información escrita en el disco será considerablemente más lenta que la información conservada en la RAM, aunque el sistema operativo preferiría seguir ejecutando datos de aplicación en la memoria y utilizar el espacio de intercambio para los datos antiguos. En general, disponer de espacio de intercambio como una segunda opción para cuando la RAM de su sistema se agote puede funcionar como una buena red de seguridad contra excepciones por falta de memoria en sistemas con almacenamiento no SSD disponible.

Si bien, en general, el intercambio se recomienda para sistemas que utilizan discos duros giratorios tradicionales, utilizarlo con SSD puede causar problemas de degradación de hardware con el paso del tiempo. Debido a esta consideración, no SUELE recomendarse habilitar el intercambio que utilice almacenamiento SSD

Veremos pues para intentar resolver el problema , crear una partición SWAP en Ubuntu, Linux Mint y derivados.


MÉTODO 1

Línea de comandos desde el Terminal (¡La forma más rápida!)


PASO 1:

El primer paso es comprobar si por casualidad hay alguna partición SWAP ya creada en su servidor:

sudo swapon --show

Introduzca su contraseña de root.

Si no ve ninguna salida, significa que el SWAP no existe.

PASO 2:

A continuación, veamos la estructura actual de particiones del disco duro de su ordenador:

df -h

El dispositivo con / en la columna Mounted on es nuestro disco en este caso. En este ejemplo, contamos con bastante espacio disponible (solo 16 GB utilizados).

Aunque existen varias opiniones acerca de la dimensión adecuada de un espacio de intercambio, depende de sus preferencias personales y de los requisitos de su aplicación. En general, una cantidad idéntica o equivalente al doble de la cantidad de RAM en su sistema es un buen punto de partida. Otra buena regla general es que cualquier cosa que supere los 4G de intercambio es probablemente innecesaria si lo está utilizando como una segunda opción a la falta de memoria RAM.


PASO 3:

Antes de iniciar los cambios deshabilite el uso de swap:

sudo swapoff -a

Hecho esto si repite el comando anterior verá que ya no hay swapping

PASO 4:

Ahora es el momento de crear el archivo SWAP. Asegúrese de que tiene espacio suficiente en el disco duro, porque lo demás es una cuestión de preferencia en cuanto al tamaño de SWAP que necesita.

Lo recomendable es si tiene un máximo de 4GB de RAM poner el doble de RAM para el SWAP (8GB para el SWAP) pero para ordenadores con más de 4GB se recomienda el mismo número de RAM para SWAP más 2GB. Por ejemplo si dispone de 8GB, poner 8GB + 2GB, totalizando 10GB para SWAP. Pero puede elegir libremente siempre que disponga espacio en el disco para albergarla.

Una opción posible es esta:

sudo dd if=/dev/zero of=/swapfile bs=50G count=10 status=progress

Otra posibilidad mas habitual es crearlo con el siguiente comando:

sudo fallocate -l 50G /swapfile

Podemos verificar que la cantidad correcta de espacio ya esta reservada ingresando lo siguiente:

ls -lh /swapfile


PASO 5:

El archivo SWAP ya está creado. Démosle permisos de root.

Ahora que tenemos un archivo del tamaño correcto disponible, debemos convertir esto en espacio de intercambio.

Primero, debemos restringir los permisos del archivo para que solo los usuarios con privilegios de root puedan leer el contenido. Esto impide que usuarios comunes puedan acceder al archivo, lo que tendría implicaciones de seguridad significativas.

sudo chmod 600 /swapfile

Verifique el cambio de permisos introduciendo lo siguiente:

ls -lh /swapfile

Como puede ver, los indicadores de lectura y escritura solo están habilitados para el root user.

Ahora por fin pues podemos marcar el archivo como espacio de intercambio .


PASO 6:

Marque el archivo como espacio SWAP:

sudo mkswap /swapfile

Puede que le de un error de montaje :

Si es asi , deberemos liberar el swapp nuevamente mediante el comando:

sudo  swapoff -a

Una vez vuelva a ejecutar el comando sudo mkswap /swapfile sin errores, puede habilitar nuevamente el swapping mediante el comando sudo swapon -a y ya puede verificar que el intercambio esté disponible ingresando lo siguiente:

sudo swapon --show


PASO 7:

Después de marcar el archivo, podemos habilitar el archivo de intercambio, lo cual permite que nuestro sistema empiece a utilizarlo asi que finalmente habilite pues el SWAP.

sudo swapon /swapfile


PASO 8:

Ahora puede comprobar usando el mismo comando swapon si el SWAP está creado.

sudo swapon --show


PASO 9:

Compruebe también de nuevo la estructura final de la partición.

free -h


PASO 10:

Una vez que todo está configurado, puede configurar el archivo SWAP como permanente, de lo contrario perderá el SWAP después de reiniciar.

Si quiere que los cambio sean definitivos ejecute este comando:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab


Listo, ahora salga de la terminal. Puede comprobar el estado de SWAP en la utilidad System Monitor.

Nuestro intercambio se ha configurado con éxito y nuestro sistema operativo comenzará a utilizarlo según sea necesario.

Paso 11:

Ajustar sus ajustes de intercambio.

Existen algunas opciones que puede configurar y que tendrán efecto en el rendimiento de su sistema al gestionar un intercambio. La primera opcion es ajustar la propiedad swappiness y la segunda es ajustar la presion de la cache .

Ajuste de la propiedad “”swappiness”

El parámetro swappiness configura la frecuencia con la cual su sistema intercambia datos de la RAM al espacio de intercambio. Este es un valor entre 0 y 100 que representa un porcentaje. Con valores cercanos a cero, el núcleo no intercambiará datos en el disco a menos que sea absolutamente necesario. Recuerde que las interacciones con el archivo de intercambio son “exigentes” puesto que tardan mucho más que las interacciones con la RAM y pueden reducir el rendimiento considerablemente. Indicar al sistema que no dependa del intercambio en demasía hará que sea más rápido.

En un esfuerzo por mantener más espacio de RAM libre, se intentará verter al intercambio más datos de los valores cercanos a 100. Dependiendo del perfil de memoria de sus aplicaciones o para qué está utilizando su servidor, esto podría ser mejor en algunos casos.

Podemos ver el valor de intercambiabilidad actual al ingresar lo siguiente:

cat /proc/sys/vm/swappiness

Para un escritorio, un ajuste de intercambiabilidad de 60 no es un mal valor. Para un servidor, posiblemente le convenga acercarlo a 0.Podemos fijar la capacidad de intercambio en un valor diferente con el comando sysctl.

Por ejemplo, para establecer la intercambiabilidad en 10, podríamos ingresar lo siguiente:

sudo sysctl vm.swappiness=10

Esta configuración persistirá hasta el próximo reinicio. Podemos establecer este valor automáticamente en el reinicio añadiendo la línea a nuestro archivo /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

En la parte inferior, puede añadir:

vm.swappiness=10

Guarde y cierre el archivo cuando haya terminado.

Ajustar la configuración de presión de caché

Otro valor relacionado que podría querer modificar es el vfs_cache_pressure. Esta ajuste determina en qué medida el sistema elegirá almacenar en caché información de inodos y entradas de directorio en lugar de otros datos.

Básicamente, estos son datos de acceso sobre el sistema de archivos. Generalmente, la búsqueda de esto supone costos muy altos y se solicita con mucha frecuencia, por lo cual el almacenamiento en caché . Puede ver el valor actual consultando el sistema de archivos proc nuevamente:

cat /proc/sys/vm/vfs_cache_pressure

Dado que está configurado actualmente, nuestro sistema elimina la información de inodo de la memoria caché demasiado rápido. Podemos establecer esto en un parámetro más conservador como 50 al ingresar:

sudo sysctl vm.vfs_cache_pressure=50

Una vez más, esto solo es válido para nuestra sesión actual. Podemos cambiar eso añadiéndolo en nuestro archivo de configuración como hicimos con nuestro ajuste de intercambiabilidad:

sudo nano /etc/sysctl.conf

En la parte inferior, añada la línea que especifique su nuevo valor:

vm.vfs_cache_pressure=50

Guarde y cierre el archivo cuando haya terminado.

PROBLEMAS PERSISTENTYES

A pesar de los cambios realizados ampliando el swapping hay varias razones por las cuales Ubuntu puede estar utilizando memoria física en lugar de la memoria de intercambio (swap):

  1. Tamaño de la memoria de intercambio: Si el tamaño de la memoria de intercambio es demasiado pequeño, es posible que el sistema no necesite utilizarla, ya que tiene suficiente memoria física disponible. Puede verificar el tamaño de la memoria de intercambio ejecutando el siguiente comando:cat /proc/sys/vm/swappiness Si el valor devuelto es 0, significa que la memoria de intercambio está desactivada. Si desea habilitarla, puede modificar el archivo /etc/sysctl.conf y ajustar el valor de vm.swappiness a un número mayor que 0 (por ejemplo, 10). Luego reinicie su sistema para que los cambios surtan efecto.
  2. Uso eficiente de la memoria: El kernel de Linux intenta utilizar la memoria física de manera eficiente y mantener la mayor cantidad posible de datos en la memoria principal para un acceso más rápido. Si hay suficiente memoria RAM disponible, es posible que el sistema no necesite hacer uso de la memoria de intercambio.
  3. Opciones de configuración del sistema: Es posible que la configuración del sistema esté optimizada para priorizar el uso de la memoria física en lugar de la memoria de intercambio. Puede verificar y ajustar la configuración del kernel a través del archivo /etc/sysctl.conf y los parámetros relacionados con la memoria y el intercambio.

En resumen, si su sistema tiene suficiente memoria RAM disponible y no está haciendo un uso intensivo de la CPU, es posible que no se utilice la memoria de intercambio. Esto no es necesariamente un problema, ya que la memoria física es más rápida que la memoria de intercambio y proporciona un mejor rendimiento. Sin embargo, si experimentas problemas de rendimiento o tu sistema se queda sin memoria física, puede ser necesario ajustar la configuración de la memoria de intercambio para garantizar un funcionamiento adecuado.

MÉTODO 2

Modo GUI usando GParted: Si quiere ir directamente a través de la interfaz gráfica puede usar la utilidad Gparted.

Gparted es un gestor de particiones gratuito y de código abierto para gestionar gráficamente las particiones. Puedes añadir, modificar o eliminar tus particiones con sólo pulsar un botón. Esta es una herramienta excelente para aquellos que no quieren gestionar sus discos a través de utilidades de línea de comandos. Puede ser fácilmente instalado y utilizado en casi todas las plataformas (tanto de 32 bits y 64 bits) como Windows, Linux o Mac OS X.

Si está utilizando una versión mínima de Ubuntu Linux, entonces la aplicación Gparted no estará presente en su sistema por defecto, por lo tanto, tenemos que instalarlo manualmente. Utilice los siguientes comandos.

1. Actualizar la caché del repositorio APT
Primero vamos a ejecutar el comando de actualización del sistema que vaciará y reconstruirá la caché del repositorio del gestor de paquetes APT del sistema. Además, instala, si hay alguna actualización disponible.

sudo apt update

2-Comando para instalar Gparted en Ubuntu 20.04 | 22.04
Como los paquetes para instalar Gparted está disponible a través del repositorio por defecto de Ubuntu 20.04 y 22.04 Linux, por lo tanto, no es necesario añadir ningún tipo de repositorio de terceros en absoluto. Sólo tiene que utilizar el gestor de paquetes APT comando que se indica a continuación.

sudo apt install gparted -y

4. Menú GParted
El uso de GParted es relativamente sencillo, ya que el programa se maneja completamente a través de una ventana. En esta ventana, puede ver la división del disco duro actualmente seleccionado. Se puede acceder a todas las opciones y acciones posibles a través de la barra de menú. Las opciones o acciones que no están disponibles son automáticamente ocultadas por GParted.

En el menú «GParted» puede seleccionar la unidad a particionar a través del elemento «Dispositivos» (si tiene varios discos duros), a través de «Actualizar Dispositivos» se leen de nuevo las unidades actualmente conectadas. La opción de menú «Ver» «Soporte de sistemas de archivos» muestra en una matriz qué acciones (ampliar, reducir, crear, etc.) son posibles con los diferentes tipos de sistemas de archivos soportados.

La opción «Editar» contiene tres acciones: «Deshacer» permite deshacer las últimas acciones realizadas, o «Borrar» para eliminar todas las acciones; los cambios realizados se llevan a cabo en la partición seleccionada mediante «Aplicar todas las operaciones».

GParted guarda primero todos los cambios en un buffer y sólo los ejecuta cuando se pulsa «Aplicar todas las operaciones». Una vez que se ha ejecutado «Aplicar todas las operaciones», los cambios no se pueden deshacer. Por lo tanto, «Aplicar todas las operaciones» sólo debe seleccionarse si se está seguro de los cambios. En el peor de los casos, se perderán todos los datos almacenados en el disco duro.

Mitos sobre SWAP

Igual que ocurre con la paginación de Windows, hay muchos mitos y muchas leyendas que giran en torno al intercambio de Linux. Y uno de los más graves es, desde luego, gira en torno a su funcionamiento. Generalmente se asocia el intercambio a que, cuando se alcanza cierto umbral, se deja de usar la RAM y se empieza a usar este SWAP. Es un concepto muy erróneo que, como se ha extendido a lo largo de los años, se cree que es verdad. Pero está muy lejos de la realidad. Y menos si configuramos correctamente el Swapiness.

Esto quiere decir que no deberíamos tener miedo de usar esta función de la que os hemos estado hablando, especialmente en equipos que estén limitados en la memoria RAM disponible. La mayoría de las ocasiones ganaremos en rendimiento al tiempo que evitamos posibles bloqueos en el funcionamiento de algunos programas.

Otro mito (a medias) es que perdemos rendimiento en el PC. Este, en el pasado, era cierto, ya que escribir en los discos duros era infinitamente más lento que hacerlo en la RAM. A día de hoy, con los SSD NVMe PCIe 4.0, aunque puede haber pérdida de rendimiento, esta es casi inapreciable.

¿Y qué pasa con que se rompen los discos duros y, sobre todo, los SSD? Los discos duros jamás se han roto por usar el intercambio. Las primeras unidades de SSD tenían ciclos de escritura muy cortos y limitados, y las escrituras del SWAP es cierto que podían llegar a resentirlos. Hoy en día, los ciclos de escritura y lectura los hacen casi eternos, por lo que no va a haber el menor problema en ese sentido.

Esto quiere decir que nos podemos olvidar de esos mitos y leyendas que afirman que el uso de esta funcionalidad en Linux podría dañar las unidades de disco sólido que tengamos instaladas en el equipo.

🤞 No se pierda nuestro boletín mensual !es gratis!

¡No hacemos spam! Más información en nuestra política de privacidad

Deja una respuesta

ARRIBA