Comando para exibir Uso de Memória, Uso de Disco e Carga da CPU

15

Quero exibir Uso de memória, Uso de disco e Carga da CPU no seguinte formato:

Memory Usage: 33/512MB (6%)    
Disk usage: 4.2/20GB (23%) 
CPU Load: 0.01

Como faço isso?

Prem
fonte
Parece muito com lição de casa. Pegue os dados necessários no / proc ou em outros comandos e depois formate-os com awk, perl ou apenas bash.
mikebabcock
Bem-vindo ao Unix e Linux Stack Exchange! Por favor, sempre incluir o seu OS. As soluções geralmente dependem do sistema operacional que está sendo usado. Você está usando Unix, Linux, BSD, OSX, outra coisa? Qual versão?
terdon
Obrigado rapazes por sua ajuda. No entanto, eu tenho a minha resposta aqui stackoverflow.com/questions/33774260/...
Mohsin Inayat Khan

Respostas:

33

Tente isso, ele funciona no meu sistema Debian. Os detalhes podem variar dependendo da implementação dessas ferramentas que seu sistema operacional usa:

#!/bin/sh
free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}' 

Se você salvar o acima como um script e executá-lo, obterá (exemplo do meu sistema):

$ ./foo.sh 
Memory Usage: 4986/7994MB (62.37%)
Disk Usage: 23/68GB (35%)
CPU Load: 0.78

Observe que o script acima está fornecendo o uso do disco para a /partição. Você não especificou o que queria, então acho que é isso que você procura.

terdon
fonte
1
Eu tentei com apenas awk github.com/rahulinux/scripts/blob/master/sys_info.sh
Rahul Patil
@RahulPatil parece bom, por que você não o publica?
terdon
3
porque é apenas a sua cópia e ans. : D
Rahul Patil 31 /
1
a linha free -m me dá um erro, a porcentagem não foi escapada corretamente. é assim que deve ser:free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
simon
1
@ user1735921 Faça uma pergunta . Mas primeiro, pesquise no google como armazenar a saída de um comando em uma variável, isso é trivial. Em seguida, explique o que você deseja armazenar e o que deseja testar na pergunta.
terdon
5

Verifique no topo .

Leia isto, https://lwn.net/Articles/387202/

Vejo, insira a descrição da imagem aqui

Você pode ver a carga do disco / memória / CPU pelos aplicativos:

insira a descrição da imagem aqui

Por exemplo, uso do disco:

insira a descrição da imagem aqui

no topo das estatísticas reunidas no diretório /var/log/atop/em arquivos de formato binário por dia. Você pode ler uma página de manual, deve haver uma maneira de extrair informações úteis.

user2496
fonte
2

Não há um comando para exibir exatamente em seu formato específico, mas os seguintes fornecem alguns dos valores base, sobre os quais se pode construir um script, como alternativa, também é possível ler valores de / proc e / sys.

free - visão geral rápida

vmstat 1 mostra estatísticas de E / S de desempenho do sistema

top dinâmico

htop semelhante ao topo

X Tian
fonte
1
Jogue no meu favorito, iostat.
mikebabcock
0

Eu acho que você precisa da ajuda do nagios, pois todos esses plugins / srcipts para nagios já foram criados e você pode fazer o download e testar sem a instalação do nagios.

klerk
fonte
0

Se você estiver usando solaris, verifique isto: showcpucount

Isso lhe dará uma idéia de como escrever seu código.

vikkp
fonte
O blog não existe mais.
Jay Elston
0

Aqui está o meu código para obter o uso da CPU e da RAM:

### 1. get total average CPU usage for the past minute
avg_cpu_use=$(uptime)
# a. split response
IFS=',' read -ra avg_cpu_use_arr <<< "$avg_cpu_use"
# b. find cpu usage
avg_cpu_use=""
for i in "${avg_cpu_use_arr[@]}"; do :
    if [[ $i == *"load average"* ]]; then
        avg_cpu_use=$i
        break       
    fi
done
# c. create response
avg_cpu_use=$(echo ${avg_cpu_use:16})   # Remove "  load average: "
if [[ -z "${avg_cpu_use// }" ]]; then
    avg_cpu_use="CPU: N/A%%"
    exit -1
else
    avg_cpu_use="CPU: ${avg_cpu_use}%%"
fi

### 2. get RAM usage
ram_use=$(free -m)
# a. split response by new lines
IFS=$'\n' read -rd '' -a ram_use_arr <<< "$ram_use"
# b. remove extra spaces
ram_use="${ram_use_arr[1]}"
ram_use=$(echo "$ram_use" | tr -s " ")
# c. split response by spaces
IFS=' ' read -ra ram_use_arr <<< "$ram_use"
# d. get variables
total_ram="${ram_use_arr[1]}"
ram_use="${ram_use_arr[2]}"
# e. create response
ram_use="RAM: ${ram_use}/${total_ram} MB"

echo $avg_cpu_use
echo $ram_use
xinthose
fonte
-2

Você deve poder exibir o uso da memória, o uso do disco e a carga da CPU usando:

(ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2)
Abhijeet Petkar
fonte