tag sociales servidor redes paginas mp3tag kid3 editar easytag como bloquear linux swap

sociales - LINUX: Cómo bloquear las páginas de un proceso en la memoria



mp3tag (4)

Tengo un servidor LINUX que ejecuta un proceso con una gran huella de memoria (una especie de motor de base de datos). La memoria asignada por este proceso es tan grande que parte de ella necesita ser intercambiada (paginada).

Lo que me gustaría hacer es bloquear las páginas de la memoria de todos los demás procesos (o un subconjunto de los procesos en ejecución) en la memoria, de modo que solo las páginas del proceso de la base de datos se intercambien. Por ejemplo, me gustaría asegurarme de que puedo continuar conectándome de forma remota y monitorear la máquina sin que los procesos se vean afectados por el intercambio. Es decir, quiero que sshd, X, top, vmstat, etc. tengan la memoria de todas las páginas.

En Linux hay las llamadas al sistema mlock (), mlockall () que parecen ofrecer el mando adecuado para realizar la fijación. Desafortunadamente, me parece que debo hacer una llamada explícita dentro de cada proceso y no puedo invocar mlock () desde un proceso diferente o desde el padre (mlock () no se hereda después de fork () o evecve ()).

Cualquier ayuda es muy apreciada. Pizza virtual y cerveza ofrecidas :-).


En realidad, bloquear las páginas de la mayoría de las cosas en su sistema parece un poco burdo / drástico, sin mencionar que es un abuso del mecanismo que parece causar algunos otros problemas no anticipados.

Idealmente, lo que probablemente realmente desea es controlar la "swappiness" de grupos de procesos para que la base de datos sea la primera en la línea en ser intercambiada, mientras que las herramientas esenciales de administración del sistema son las últimas, y hay una manera de hacerlo .


Ha pasado un tiempo desde que hice esto, así que me he perdido algunos pasos.

Haz un archivo de comando GDB que contenga algo como esto:

call mlockall(3) detach

Luego, en la línea de comandos, busque el PID del proceso que desea hacer mlock. Tipo:
gdb --pid [PID] --batch -x [command file]

Si te apetece con pgrep eso podría ser:
gdb --pid $(pgrep sshd) --batch -x [command file]


Hoy en día, la manera fácil y correcta de abordar el problema es cgroup.

Simplemente restringe el uso de memoria del proceso de base de datos:

1. create a memory cgroup sudo cgcreate -g memory:$test_db -t $User:$User -a $User:$User 2. limit the group''s RAM usage to 1G. echo 1000M > /sys/fs/cgroup/memory/$test_db/memory.limit_in_bytes or echo 1000M > /sys/fs/cgroup/memory/$test_db/memory.soft_limit_in_bytes 3. run the database program in the $test_db cgroup cgexec -g memory:$test_db $db_program_name


Mientras buscaba información de mlockall encontré esta herramienta. Es posible que pueda encontrarlo para su distribución. Solo encontré la página de manual.

http://linux.die.net/man/8/memlockd