Me pregunto cómo puedo averiguar en bash cuántos núcleos de CPU está utilizando un usuario en un servidor Linux.
Estoy enviando una buena cantidad de trabajos en segundo plano al servidor, por lo que me gustaría escribir un script bash para verificar antes de enviar un trabajo si los trabajos (procesos) en ejecución enviados por mí son demasiados, porque tengo que dejar que otros los usuarios tienen suficientes núcleos para usar en sus trabajos. Me gustaría saber qué comando bash puede decirme cuántos núcleos están usando mis trabajos ahora.
¡Gracias y saludos!
No sé si ayuda, pero puede usar la
mpstat
utilidad para obtener un desglose del uso de la CPU por procesador individual (o núcleo). Por ejemplo:En este ejemplo, se puede ver que de la CPU
0
,1
y6
están haciendo más trabajo que el resto de ellos. A veces verá que una sola CPU está cerca (o al) 100%, mientras que otras están en cero. Esto puede ser un indicador de programa (o parte de un programa) que tiene un solo subproceso y solo puede usar una sola CPU a la vez.Para instalar
mpstat
en un sistema Fedora, RHEL o CentOS, useyum install sysstat
.fuente
# aptitude search mpstat #
.aptitude search systat
lugar.sysstat
en Debian y en Ubuntu . Esperaría que la mayoría de las distribuciones derivadas de Debian usen el mismo nombre de paquete. En las distribuciones derivadas de Debian, comience porapt-cache search --full mpstat
.A menos que esté configurado explícitamente para no (es decir, fijar un proceso a una CPU específica), se puede suponer que todos los núcleos están en uso en todo momento. El planificador asignará procesos al siguiente núcleo disponible. Caso en cuestión, "Monitor de sistema" (parte de GNOME) muestra mi carga casi igual en los 4 núcleos de mi máquina.
fuente
Entonces verá que hay respuestas aquí que le dirán cómo se están utilizando sus núcleos.
SIN EMBARGO - esto realmente no te está haciendo un servicio. Has hecho una suposición básica que simplemente no es válida: que tus trabajos tenderán a agruparse en algún subconjunto de núcleos.
En cambio, sus trabajos se distribuirán en todos los núcleos, a menos que implemente algo que los mantenga "encerrados" de alguna manera. (Nota: no lo recomiendo; solo digo "a menos que")
Aquí hay una estrategia alternativa: identifique para su sistema particular cuál es el nivel de CARGA cuando considere que es "aceptable" que otros usuarios agreguen más trabajos. Luego, cree algo que solo envíe un nuevo trabajo en segundo plano cuando el nivel de carga esté por debajo de ese límite.
De esa manera, la solución será independiente del conteo de núcleos, más portátil, más flexible y más fácil de "ajustar".
fuente
Si desea hacer esto para que funcione en Linux y OS X, puede hacer lo siguiente:
fuente
Puede obtener una estimación aproximada ejecutando
top
, presionando 'U
' y especificando su nombre de usuario, y luego sumando la utilización de la CPU de sus pocos procesos principales.fuente
top
puede ejecutarse en modo por lotes con el modificador -b. Combínelo con el modificador -n para obtener la cantidad de iteraciones que necesita.top
salida o google para ver si alguien ya lo ha hecho. Sin embargo, no estoy convencido de que valga la pena el esfuerzo porque creo que obtendré diferentes resultados para cada ejecución dada la velocidad a la que ocurre el cambio de contexto. ¿No es el sistema cargar un indicador suficientemente bueno? Efectivamente le dice cuántos núcleos virtuales son necesarios para manejar la cola de procesos (procesos que esperan en la CPU).