Necesito monitorear el uso de la CPU por parte de los usuarios de dos servidores '(Ubuntu y CentOS). Por ejemplo:
user1 5%
user2 10%
...
¿Existe alguna herramienta similar top
o htop
que pueda hacer eso?
Necesito monitorear el uso de la CPU por parte de los usuarios de dos servidores '(Ubuntu y CentOS). Por ejemplo:
user1 5%
user2 10%
...
¿Existe alguna herramienta similar top
o htop
que pueda hacer eso?
Respuestas:
Aquí hay un script para imprimir el uso total de la CPU para cada usuario actualmente conectado , showPerUserCPU.sh :
own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
for user in $(who | awk '{print $1}' | sort -u)
do
# print other user's CPU usage in parallel but skip own one because
# spawning many processes will increase our CPU usage significantly
if [ "$user" = "$own" ]; then continue; fi
(top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }') &
# don't spawn too many processes in parallel
sleep 0.05
done
wait
# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'
Y aquí hay una versión ligeramente modificada para imprimir el uso de CPU de todos los usuarios disponibles (pero omitiendo los que tienen un uso de CPU de cero), showAllPerUserCPU.sh :
own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
for user in $(getent passwd | awk -F ":" '{print $1}' | sort -u)
do
# print other user's CPU usage in parallel but skip own one because
# spawning many processes will increase our CPU usage significantly
if [ "$user" = "$own" ]; then continue; fi
(top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { if (sum > 0.0) print user, sum, sum/CPUS; }') &
# don't spawn too many processes in parallel
sleep 0.05
done
wait
# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'
La primera columna representa el nombre de usuario, la segunda columna el uso de CPU agregado y la tercera columna el uso de CPU normalizado de acuerdo con el número de núcleos de CPU.
También hay un script relacionado para mostrar el uso total de memoria para cada usuario: showPerUserMem.sh
Para el monitoreo en vivo, simplemente ejecute estos scripts periódicamente a través del watch
comando.
Para ordenar por uso de CPU, canalice la salida a sort -k2 -nr
.
$USER
es su nombre de usuario, por lo que es el mismo que el id -nu
comando que está utilizando. He editado su publicación para cambiar esto.
/etc/init.d/
directorio también lo están haciendo. Se debe evitar sobrescribir las variables de entorno existentes en contraste.
top -u user
y redirigir el resultado a un archivo y luego monitorear a otro usuario. entonces tendría un monitor de uso de proceso para sus usuarios en un intervalo dado.