Por lo que entiendo, cuando el sistema está cerca de no tener memoria libre, el kernel debería comenzar a matar procesos para recuperar algo de memoria. Pero en mi sistema esto no sucede en absoluto.
Supongamos un script simple que solo asigna mucha más memoria que la disponible en el sistema (una matriz con millones de cadenas, por ejemplo). Si ejecuto un script como este (como usuario normal), solo obtiene toda la memoria hasta que el sistema se congela por completo (solo funciona SysRQ REISUB).
La parte extraña aquí es que cuando la computadora se congela, el LED del disco duro se enciende y permanece así hasta que la computadora se reinicia, ¡ya sea que tenga una partición de intercambio montada o no!
Entonces mis preguntas son:
- ¿Es este comportamiento normal? Es extraño que una aplicación ejecutada como un usuario normal pueda bloquear el sistema de esta manera ...
- ¿Hay alguna manera de hacer que Ubuntu simplemente elimine automáticamente esas aplicaciones cuando tienen demasiada (o la mayoría) memoria?
Información Adicional
- Ubuntu 12.04.3
- Kernel 3.5.0-44
RAM: ~ 3.7GB de 4GB (compartido con la tarjeta gráfica). * *
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
). Pero sin intercambio simplemente congela la computadora. ¿Se supone que funciona de esta manera (solo matar cuando se usa el intercambio)?
tail -n+1 /proc/sys/vm/overcommit_*
y agrega la salida. Vea aquí también: ¿Cómo configuro oom-killer?