2011-01-10 16 views
8

He estado buscando en internet para saber cuánta memoria puede tomar un proceso de Java en una máquina Linux (red-hat). (No estoy hablando de montón, sino de la cantidad total de memoria ocupada por el proceso java)¿Cómo se determina el límite de la memoria del proceso en Linux?

No tengo permiso para ejecutar nada en esa máquina. Por lo tanto, no puedo simplemente ejecutar un programa que consume memoria hasta que esté fuera de la memoria.

Sin embargo, tengo permiso para verificar archivos de configuración, etc. (por ejemplo: intenté ejecutar cat/proc/meminfo, pero no puedo entenderlo, parece que ninguno de sus resultados representa el parámetro Quiero saber sobre).

He probado un programa java en una máquina de red hat separada, en la que tengo permiso para ejecutar programas, y pude ver que el programa de Java crecía hasta unos 3GB.

¿Hay alguna forma en que pueda averiguar cuánta memoria puede obtener un proceso?

Respuesta

8

ulimit es tu amigo. Los procesos de Java no son diferentes a cualquier otro. Pero si ni siquiera puede ejecutar ulimit -a, es difícil responder a su pregunta.

+0

He ejecutado "ulimit -a", pero lo que obtuve fue salida con un montón de opciones para probar. Así que probé "ulimit -m", el resultado que obtuve fue "no limitado". No sé lo que eso significa, pero no creo que signifique que un proceso puede tomar memoria ilimitada ... ¿o sí? – rk2010

+2

@ rk2010 significa que no existe una cuota de uso de memoria en ningún proceso, el único límite estricto es la cantidad de memoria RAM y de intercambio que tiene la computadora. –

+0

@Matias, pero parece que hay mucha información (vaga) en Internet que indica que un determinado proceso no puede consumir más de 3 GB de memoria. ¿Cuál es tu opinión de eso? – rk2010

2

He estado tratando con este problema exacto y he encontrado la mejor solución si está usando 2.6.24 o superior es usar cgroup/cgroups. Un ejemplo sería este, aquí está el archivo predeterminado /etc/cgconfig.conf con un grupo de control agregado en la parte inferior. Este grupo de control limita la cantidad de memoria física a 100 MB y la asignación total de la memoria virtual a 200 MB.

mount { 
    cpuset = /cgroup/cpuset; 
    cpu = /cgroup/cpu; 
    cpuacct = /cgroup/cpuacct; 
    memory = /cgroup/memory; 
    devices = /cgroup/devices; 
    freezer = /cgroup/freezer; 
    net_cls = /cgroup/net_cls; 
    blkio = /cgroup/blkio; 
} 

group daemons/java_limited_process { 
    memory { 
     memory.limit_in_bytes = "104857600"; 
     memory.memsw.limit_in_bytes = "209715200"; 
    } 
} 

Una vez que haya configurado este, puedo añadir proceso para el grupo como tal

cgexec -g memory:daemons/java_limited_process /usr/local/tomcat/bin/startup.sh 

Esto limitará la memoria del proceso principal y los hijos Desova. También tiene instalaciones para consultar el uso de memoria en los controladores.

Cuestiones relacionadas