Come posso determinare la memory utilizzata da un process forgiato (Linux)?

A seguito di questa domanda . Debian, se questo è importnte.

Capisco che qualche memory sia condivisa tra i processi forgiati. Come posso quindi determinare la quantità di memory utilizzata da un process / insieme di processi forgiati?

Utilizzando lo strumento smem e suggerito in questa domanda simile , ottengo valori come:

Command Swap USS PSS RSS /usr/sbin/spamd --create-pr 0 16820 24974 41628 spamd chil 0 19388 27581 44176 spamd chil 0 32328 40038 55708 

Capisco la colonna di swap e la colonna RSS è ciò che normalmente viene segnalato (ad es. In ps). Dalla lettura della documentazione smem, suona come USS è la memory specifica per quel figlio e PSS è una porzione della memory condivisa in tutti i processi. Tuttavia, l'aggiunta di USS a PSS offre valori più alti di RSS, e ho pensato che la condivisione significherebbe less (quindi suppongo di aver interpretato in modo non corretto).

Non sono legato allo strumento smem. Vorrei solo un modo per get un numero di "memory" che rifletta in qualche modo la quantità di memory reale che il process sta usando.

  • Ottimizzazione della memory del server VPS
  • Qual è il valore ideale per i processi operai in Nginx Config?
  • Scalare uno stack LAMP
  • Come risolvere un problema di memory grande con Apache e mySQL
  • Ottimizzazione degli errori di pagina morbida
  • Profilo di Apache + Mysql + Server PHP - che è il collo di bottiglia?
  • Pila server ottimale per Wordpress
  • 2 Solutions collect form web for “Come posso determinare la memory utilizzata da un process forgiato (Linux)?”

    La dimensione proporzionale è probabilmente la migliore figura di utilizzo della memory per process disponibile. È il formato impostato univoco + (le pagine condivise / # dei processi condivise).

    Quindi un process ha utilizzato 44176 pagine, di cui 19388 sono uniche per quel process. Ciò significa che 24788 sono condivisi con gli altri.

    Guardando PSS come USS + (peso condiviso). Il peso in questo caso è 8193, ovvero la percentuale di pagine di memory condivisa (24788) attribuibili a questo process. Più casi di un'applicazione che hai pagine di condivisione, minore è il peso di ciascun process.

    È ansible sum PSS in più processi e non si contano le pagine condivise più di una volta. Tuttavia, non è ansible sum USS e PSS e si aspettano RSS perché PSS include già USS.

    Come lo capisco (ma qualcuno mi faccia correggere se sono sbagliato), solo il segmento di programma viene condiviso quando un process è forzato – i segmenti di dati divengono separati.

    Così, l'eseguibile (binario) e tutte le librerie condivise caricate saranno condivise tra i processi.

    Ogni process otterrà la propria copia (*) di qualsiasi memory allocata prima della fork, ma each memory assegnata successivamente sarà univoco a tale process.

    (*) un O / S effettivamente intelligente potrebbe evitare di effettivamente allocare segmenti di dati per la copia del bambino utilizzando una copia sull'algorithm di scrittura , in modo tale che la memory viene assegnata solo se entrambi i tentativi di modificarlo. Vedi qui.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.