Dopo la ricerca, ancora confuso sul monitoraggio dell'utilizzo della RAM


10

Ho esaminato questo articolo , che spiega vari metodi per controllare l'utilizzo della RAM. Tuttavia, non riesco a conciliare i diversi metodi e non so quale sia quello corretto.

Quando accedo per la prima volta, sono accolto da una schermata come questa:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Questo mi suggerisce che sto usando il 41% della mia RAM, che sembra piuttosto alto dal momento che il server non sta facendo molto. O quel numero si riferisce a qualcosa oltre alla RAM?

Quindi provo il free -mmetodo:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Secondo la grafica esplicativa dell'articolo, ciò implica che ho 130 MB di RAM utilizzata e 459 MB di RAM libera, il che suggerisce che sto usando circa il 22% della mia RAM.

Quindi corro top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Questo è il più confuso, poiché il riepilogo mi mostra l'utilizzo di 525MG di 604M totali, e tuttavia quando si utilizza il comando interattivo "m" per ordinare in base alla memoria superiore, il processo principale utilizza solo lo 0,3% della memoria ???

Infine, il pscomando sembra mostrare anche pochissimo utilizzo della memoria:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Mi piacerebbe che qualcuno correggesse tutti i malintesi che ho che stanno creando questi conflitti apparenti.

Grazie!

EDIT per Rahul

Uscita di cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

1 #) Il comando in cima ad ordina per memoria non è m , è M . # 2) Per vedere tutti i processi prova ** ps ax -o command, rss **; quello che hai eseguito mostra solo i tuoi.
tink

Ti preghiamo di aggiornare anche noi l'output dicat /proc/meminfo
Rahul Patil,


@ink, grazie per questa spiegazione. Ho provato ps ax -o rss | awk '{ sum+=$1} END {print sum}'proprio ora e 153156.
Giona

@RahulPatil, OP aggiornato. Si noti che i processi in esecuzione potrebbero essere leggermente diversi dai numeri originali, ma non dovrebbero essere così lontani. Inoltre, il risultato che ho ottenuto per te sembra non corrispondere al risultato che ho ottenuto per armeggiare nel commento sopra questo. Furono presi a distanza di un paio di minuti.
Giona

Risposte:


8

Devi solo capire il concetto di memoria

Come per il tuo output di / proc / meminfo, devi solo notare le seguenti cose:

Buffer : - Un buffer è qualcosa che deve ancora essere "scritto" sul disco. Rappresenta la quantità di RAM dedicata al blocco del disco cache. "Memorizzato nella cache" è simile a "Buffer", solo che questa volta memorizza nella cache le pagine dalla lettura dei file

Memoria cache : - Una cache è qualcosa che è stata "letta" dal disco e memorizzata per un uso successivo. In generale, è possibile considerare l'area cache come un'altra RAM "libera" poiché verrà ridotta gradualmente se l'applicazione richiede più memoria.

È sufficiente capire che sia "buffer" che "cache" rappresentano le dimensioni della cache di sistema. Crescono o si riducono dinamicamente come richiesto dal meccanismo interno del kernel Linux.

su Webhosting cancellano la cache usando sotto cmd: (principalmente configurato in cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Link preventivo

MODIFICA per un ulteriore requisito, ovvero per l'utilizzo della memoria dell'utente

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Si prega di verificare con lo script sopra e fammi sapere, se mostra correttamente o no.


Grazie Rahul. Un'ultima domanda. Poiché free -mnon fornisce un modo per visualizzare la memoria utilizzata per utente, qual è un modo preciso per determinare quanta RAM reale viene consumata da un determinato utente? Ciò si verifica quando si monitora l'utilizzo della memoria su un server condiviso, ad esempio.
Giona

@Giona Ho aggiornato .. per favore controlla e fammi sapere
Rahul Patil,

quella sceneggiatura non funziona come previsto .. ma sto provando si aggiornerà presto
Rahul Patil,

@Jonah grazie per aver accettato la mia ans .. ma grazie davvero per MichaelHampton ...
Rahul Patil

2

Buona risposta @RahulPatil.

Un altro punto da considerare su ps o top è il seguente

Questo strumento [exmap] è più accurato di ps o top perché tiene conto delle librerie condivise in uso da più applicazioni. Ad esempio, se due applicazioni utilizzano la stessa libreria condivisa, che occupa 1 MB di memoria, ps mostrerà entrambe le app utilizzando 1 MB di memoria aggiuntiva, mentre exmap mostra più correttamente ogni app utilizzando 500 KB. Questa maggiore precisione è particolarmente importante per la valutazione di ambienti desktop come KDE e GNOME, che fanno un uso molto pesante delle librerie condivise tra le applicazioni.

Tramite ibm / developerworks / linux_memory

Dal momento che la tua domanda si riferisce a un server senza testa, non sono sicuro di quanto in realtà avrà doppio double top o ps.


0

Temo che potremmo trascurare l'ovvio perché è così "certo" per la maggior parte di noi.

Jonah, perdonami se sbaglio, ma le tue domande sembrano non aver capito che tutti questi valori, in particolare l'utilizzo della CPU, variano di norma da un secondo all'altro.

L'utilizzo della CPU può passare da una sola cifra al 100% istantaneamente all'avvio di un nuovo processo, ma rapidamente (si spera) ricadere nell'intervallo inferiore al 50%.

L'uso della memoria cambia più lentamente ma lì Linux tenta di utilizzare la memoria non in uso attivo eseguendo processi per "memorizzare nella cache" gli accessi al disco. Ad esempio, tenta di prevedere ciò che dovrà essere letto dal disco successivo, come ad esempio il resto di un file di grandi dimensioni dopo che una parte è stata letta e precaricarlo nella cache. Alcuni dei valori di utilizzo della memoria includono sia la memoria utilizzata dai processi sia la memoria utilizzata per la memorizzazione nella cache. Su un sistema che funziona da un po ', i due combinati saranno probabilmente 80-90% o più.

Considera anche che il processo che esegui per mostrare l'utilizzo, ad esempio top, utilizza anche CPU e memoria. Se hai scritto uno script con un ciclo per segnalare continuamente l'utilizzo della CPU, quasi sicuramente mostrerebbe sempre il 100% perché l'atto di segnalare l'utilizzo stesso (senza alcuni sleep ritardi introdotti) utilizza tutta la CPU.


Doc, grazie per il pensiero, ma non era questo il problema
Giona,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.