Historias
Slashboxes
Comentarios
 

Login Barrapunto

Login

[ Crear nueva cuenta ]

mig21 (7781)

mig21
  reversethis-{moc.liamg} {ta} {pb12gim}
https://twitter.com/yapw

Hola, soy Miguel. Algo que pueda ser relevante aquí... Uhmm... Me gusta escribir en mi bitácora de BP [barrapunto.com] y en su clon en blogspot: Yet Another Programming Weblog [blogspot.com]
Me gustaría que Barrapunto fuese un sitio con más discusiones técnicas y trato de hacer lo que está en mi mano. De todos modos, también me gusta leer flames ;)

No creo que te interese, pero en Lecturas aleatorias [blogspot.com] dejo registro de los libros que voy leyendo...

Esta es toda mi información de usuario :)

Down Kill Up Publicidad

Bitácora de mig21 (7781)

Lunes, 04 de Febrero 2008

(Otros) problemas con la memoria y (otras) soluciones

10:03h.
Programación
Alguien en programming.reddit hizo una pregunta de esas difíciles: ¿Cómo manejar en un programa en C los casos en los que la memoria se agota? Y digo que es una de esas preguntas difíciles porque depende del tipo de software que estás haciendo, de su criticidad y del nivel requerido de robustez. Ya se sabe, el difícil compromiso de la gestión de errores críticos.

Y como se ve en las respuestas de los redditenses no sólo depende de nuestro sistema, sino de detalles de implementación de más abajo, como suele ser usual en los casos no del todo raros en los que las abstracciones que usamos comienzan a flaquear. En este caso se habla del comportamiento de Linux (el kernel) a la hora de tratar la falta de memoria, que por defecto usa una estrategia optimista que deja reservar (pero no usar, claro) más memoria de la disponible. No obstante este comportamiento se puede cambiar a uno un poco más controlable a través del parámetro overcommit_memory , que se introdujo no hace tanto... El comportamiento por defecto es llamar al OOM Killer que es un método tan drástico como poco predecible. Todo esto esta muy bien explicado en When Linux Runs Out of Memory que vi referenciado por aquí en tiempos de mayor intensidad técnica :)

Además en las respuestas se apunta a un libro online de los que vienen bien cuando las condiciones son más extremas de lo usual: Small Memory Software. Patterns for systems with limited memory . Apuntado en éste mi del.icio.us particular.

(El título es "(Otros) problemas con la memoria y (otras) soluciones " porque no hace mucho escribí Problemas de memoria (y algunas soluciones), sobre el cuello de botella que supone la gestión de memoria sobre todo en sistemas multicore)
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • Re:Ya que sabes del tema

    (Puntos:2, Inspirado)
    por mig21 (7781) <reversethis-{moc.liamg} {ta} {pb12gim}> el Lunes, 04 Febrero de 2008, 21:23h (#1011534)
    ( https://twitter.com/yapw | Última bitácora: Viernes, 13 Mayo de 2011, 21:21h )
    Pues yo ejecutaría asterisk con valgrind [valgrind.org] (una maravilla) o con gdb...

    valgrind está muy bien porque te dirá cuando suceden accesos a zonas de memoria no reservadas y similares (entre otras muchas cosas) Eso si, conviene, al menos echarle un vistazo al man valgrind o al manual online, porque tiene unas cuantas opciones ;)

    Lo malo de los sistemas de depuración es que, al estar monitorizando los procesos estos no se ejecutan exactamente del mismo modo que sin supervisión... y puede ocurrir, como en las condiciones de carrera tan comunes con multihilo, que no seas capaz de reproducirlas porque se ejecuta mucho más lento...

    Eso si, cabe la posibilidad de que estés usando una configuración atípica y poco testada, así que si vas a ejecutarlos con supervisión que sea en las condiciones más parecidas a las de ejecución sin monitorización.

    Lo difícil en sistemas multihilo es reproducir el error, saber de que depende, porqué falla (que es lo que está mal sincronizado, dónde falta coger un objeto de sincronización, dónde dejarlo...) y lo que es peor, saber arreglarlo, en función de lo difícil y enrevesado del código y sus estrategias de sincronización...

    Eso si, paciencia, intuición y suerte :)
    --
    Aquí había una firma
    [ Padre ]
  • por Ice_Glacierre (12752) el Lunes, 04 Febrero de 2008, 23:29h (#1011586)
    ( Última bitácora: Lunes, 29 Octubre de 2012, 18:48h )
    Mi nivel de programación del sistema en unix no llega a los hilos, sino a los procesos. En estos últimos tienes funciones como sigprocmask (y en general toda la parafernalia incluida en signal.h) con las que puedes bloquear SIGINT o SIGKILL (que supongo serán las que se envían al haber una excepción), o en su lugar reemplazar el comportamiento al recibir una de estas (por ejemplo imprimir un log antes de salir).

    Lo que no sé es si esto vale para hilos o no.
    [ Padre ]
    • SIGSEGV de P3P (Puntos:1) Martes, 05 Febrero de 2008, 22:09h
      • Re:SIGSEGV de Ice_Glacierre (Puntos:2) Martes, 05 Febrero de 2008, 23:53h
  • 1 respuesta por debajo de tu umbral de lectura actual.