Archivo de la categoría: Utilidades

Limitar número de cores disponibles mediante cgroups

Mediante cgroups podemos limitar el número de cores disponibles para un determinado proceso, vamos a ver cómo.

Para hacer los cambios persistentes, deberemos editar el fichero /etc/cgconfig.conf , por ejemplo:

group vuitcores {
    perm {
        admin {
            uid = root;
        }
        task {
            uid = jprats;
        }
    }
    cpuset {
	cpuset.mems=0;
        cpuset.cpus="0-7";
    }
}

Mediante dicha sintaxi estamos definiendo:

  • Un grupo llamado: vuitcores
  • Opcionalmente, podemos definir permisos mediante la directiva perm
  • Limitamos el cpuset (mems y cpus son options obligaatorias):
    • cpuset.mems: Listado de nodos de memoria que permitimos acceso (para NUMA)
    • cpuset.cpus: Listado de CPUs que permitimos acceso a este cgroup

Reiniciamos el servicio para aplicar los cambios:

# /etc/init.d/cgconfig restart
Stopping cgconfig service:                                 [  OK  ]
Starting cgconfig service:                                 [  OK  ]

Mediante nproc podremos validar el número de cores disponibles para el proceso:

# /usr/bin/nproc
32

Para ejecutar una tarea en un cgroup deberemos usar cgexec indicando el grupo mediante la opción -g:

# cgexec -g cpuset:vuitcores /usr/bin/nproc
8

Podemos apreciar que en este caso nproc nos reporta 8 cores en lugar de los 32 que tiene el equipo.

Tags:

Ver la imagen mapeada en un dispositivo loop

Si tenemos en el sistema un dispositivo loop nos puede interesar saber a que imagen corresponde dicho dispositivo, vamos a ver dos formas de hacerlo:

En las versiones reciente de losetup podemos usar la opción –show que nos mostrará la imagen, en este caso /root/ejemplo:

# losetup --show /dev/loop0
/dev/loop0: [fc00]:798589 (/root/ejemplo)

Pero también lo podemos hacer mediante el /sys, dentro del dispositivo loop a buscar deberemos hacer un cat del fichero loop/backing, por ejemplo para /dev/loop0 haríamos:

# cat /sys/block/loop0/loop/backing_file 
/root/ejemplo

Tags:

Obtener JAVA_HOME mediante jrunscript

Para poder automatizar ciertas tareas nos puede interesar poder obtener el JAVA_HOME de la versión que tengamos instalada de java. Vamos a ver como podemos hacerlo mediante jrunscript:

jrunscript permite ejecutar javascript, por lo que simplemente deberemos obtener el valor de java.home y imprimirlo:

# jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
/usr/lib/jvm/java-7-openjdk-amd64/jre

Podemos ver un ejemplo de uso en el modulo de puppet eyp-tomcat para realizar la instalació de la tomcat native library:

    exec { "configure native library ${srcdir}":
      command => 'bash -c "./configure --with-apr=/usr/bin/apr-1-config --with-java-home=$(dirname $(jrunscript -e \'java.lang.System.out.println(java.lang.System.getProperty("java.home"));\'))"',
      require => [ Package[$tomcat::params::develpkg], Exec["tar xzf native library ${srcdir}"] ],
      cwd     => "${srcdir}/tomcat-native-library/jni/native",
      creates => "${srcdir}/tomcat-native-library/jni/native/Makefile",
    }

Tags: