[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: problemas con espacio de memoria y CPU -> KILLED PROCESS



On Thu, 2 Sep 2004, Christal wrote:

> Hola a todos,
>
> Estoy teniendo un problema con un proceso que ejecuto y no se como
> arreglarlo.
> Trabajo con Mandrake 9.1.
> Tengo un programa hecho en C que simplemente va revisando sus entradas por
> el puerto serie y hace lo que tenga que hacer dependiendo de lo que lea por
> el puerto... para hacer esto tengo que estar revisando constantemente el
> puerto, asi que en la funcion principal del programa (main) tengo un bucle
> que no sale hasta que no pulse "ESC".
> Hasta aqui no hay problemas porque el programa hace todo lo que tiene que
> hacer. El problema viene cuando, por ejemplo, llevo una semana trabajando
> con el, que el programa imprime in "killed" por pantalla y finaliza.
> Aqui es donde no se que debo hacer exactamente, pues no se como controlarlo.
> He hecho un "top" para mirar el estado de la memoria y muestra que el
> programa usa un 62% de CPU y un 40% de MEM.
> Lo que estoy intentando es hacer un sync cada hora (lo he puesto en el cron)
> para que cada hora se resincronice la swap, a ver si eso afecta en algo y
> puede ayudarle a recuperar algo de memoria... Tambien estoy intentando
> iniciar el proceso con el comando "nice" para darle mas o menos prioridad al
> proceso, a ver si asi consigo que no consuma tanto... ahora lo he arrancado
> como "nice -n -19 ./comunicacion" para ver si dandole la maxima prioridad
> consigo que no consuma tanto. Pero no se si asi esta bien o deberia de darle
> la menor prioridad...
> La cuestion es que de momento he revisado el top y ahora, que lleva 1h en
> marcha, consume 60-63% de CPU y 1.8% de MEM. Pero no se si ira incrementando
> o con esto lo podre controlar...
>
> Alguien sabe de esto? Cual puede ser una solucion? Lo estoy haciendo bien?
> Si alguien necesita mas datos o lo que sea, por favor, que me lo pida que
> gustosa se lo pasare!
>
> Muchisimas gracias de antemano!

Sin los fuentes todo son congeturas. Quizás tu programa tenga un desequilibrio
en la gestión de la memoria dinámica. malloc() <-> free()

Puedes comprobar la cantidad disponible de memoria usando mallinfo().
Haz trazas dentro del bucle que mencionabas.

#include <malloc.h>
struct mallinfo mi

    for (...;...;....){
        ....();
        ....();
        /* traza */
        mi = mallinfo();
        printf("%d\n", mi.arena
    }

Posiblemente comprobaras que poco a poco vas perdiendo memoria.



-- 
Un saludo
Antonio Castro

       /\     /\
         \\W//
        _|0 0|_
+-oOOO-(___o___)-OOOo---------------------+
| . . . . U U . Antonio Castro Snurmacher |
| . . . . . . . acastro@ciberdroide.com   |
+()()()---------()()()--------------------+



Reply to: