Vilka processer som tar mest minne....

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Vilka processer som tar mest minne....

Inlägg av Osprey »

Ett litet enkelt script, som visar vilka processer som tar mest minne (Pss):

Kod: Markera allt

#! /bin/bash
#
COUNT=20
#
#####################################################################
#
function usage {
	cat << EOD

usage:	memhogs [-c COUNT|--count=COUNT] [-h|--help] [-n|--no-header]

	-c NUMBER|--count=NUMBER
		Number of processes to print out, the default is $COUNT

	-h|--help
		Print out this.

	-n|--no-header
		Do not print out header.

EOD
exit
}
#
#####################################################################
#
TEMP=`getopt -oc:hn --long count:,help,noheader -n $(basename $0) -- "$@"`
if [[ $? -ne 0 ]]; then
	usage
fi
eval set -- "$TEMP"
NOHEADER=false
CMDNAME=$(basename $0)
while true; do
	case $1 in
		-c|--count)
			shift
			COUNT=$1
			shift
			;;
		-h|--help)
			usage
			exit
			;;
		-n|--noheader)
			NOHEADER=true
			shift
			;;
		--)
			shift
			break
			;;
		*)
			echo "-Got a star... [$1]"
			exit
			;;
	esac
done
P1=$1
#
#####################################################################
#
#
function btoh {
	echo $1 | awk '{sum=$1;
		hum[1024**3]="Tb";hum[1024**2]="Gb";hum[1024**1]="Mb";hum[1024**0]="Kb";
		for (x=1024**4; x>=1; x/=1024){ 
       			if (sum>=x) { 
				#printf "6.2f %s\n",sum/x,hum[x];break 		# For fixed length and positions
				printf "%.2f %s\n",sum/x,hum[x];break 
				}
			}
		}'
}
#
#LINES=$(find /proc/ -maxdepth 1 -name '[0-9]*' -print0 | while read -r -d $'\0' pidpath; do   [ -f "${pidpath}/smaps" ] || continue;   awk '!/^Private_Dirty:/ {next;} \
LINES=$(find /proc/ -maxdepth 1 -name '[0-9]*' -print0 | while read -r -d $'\0' pidpath; do   [ -f "${pidpath}/smaps" ] || continue;   awk '!/^Pss:/ {next;} \
       $3=="kB" {pd += $2 * (1024^0); next} \
       $3=="mB" {pd += $2 * (1024^1); next} \
       $3=="gB" {pd += $2 * (1024^2); next} \
       $3=="tB" {pd += $2 * (1024^3); next} \
       $3=="pB" {pd += $2 * (1024^4); next} \
       {print "ERROR!!  "$0 >"/dev/stderr"; exit(1)} \
       END {printf("%10d: %d\n", '"${pidpath##*/}"', pd)}' "${pidpath}/smaps" || break; done | sort -k2 -n | tail -$COUNT)
IFS='
'
if [[ $NOHEADER == false ]]; then
	echo
	printf "%-14s%8s     %-20s%s\n" "MEMORY" "PID" "COMM" "CMD"
	printf "%-14s%8s     %-20s%s\n" "------" "---" "----" "---"
fi
for LINE in $LINES; do
	PID=$(echo $LINE | awk -F : '{ print $1 }' | xargs)
	MEM=$(echo $LINE | awk -F : '{ print $2 }' | xargs)
	MEMH=$(btoh $MEM)
	COMM=$(ps --pid $PID --no-header -o comm)
	CMD=$(ps --pid $PID --no-header -o cmd | awk '{ print $1 }')
	printf "%-14s%8d     %-20s%s\n" $MEMH $PID $COMM $CMD
done
if [[ $NOHEADER == false ]]; then
	echo
fi
Det här scriptet bygger alltså på PSS och inte RSS, som ger en något missvisande bild och inte heller "virtual memory", som även det hamnar fel, PSS är nog bäst där. Det ger en balanserad bild av vilka processer som verkligen utnyttjar minnet mest.... :)

Jag själv kallar det förresten för "memhogs", i analogi med "nethogs", som för övrigt inte ger info på riktigt samma sätt.... ;)

Och om man vill (eller finner det skäligt), så kan man alltid köra "killall" på det som finns under "COMM" eller "CMD"....

Jag kanske har missat något, men det här är hur det ser ut när jag kör det....

Bild

[EDIT] Ny version, med några små förändringar....
(Nya versionen finns ovan...) :)
Senast redigerad av 1 Osprey, redigerad totalt 8 gånger.
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Vilka processer som tar mest minne....

Inlägg av Osprey »

Uppdatering (se ovan)... :D
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
skalman65
Inlägg: 1050
Blev medlem: 15 jan 2008, 23:18
OS: Annat GNU/Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalix

Re: Vilka processer som tar mest minne....

Inlägg av skalman65 »

Det här nåt jag kan finna intressant, så kopierade och skapade ett script och körde.

men får felmeddelande >:( ,, antar att det är något jag missat som vanligt.... :-[

Kod: Markera allt

MEMORY             PID     COMM                CMD
------             ---     ----                ---
awk: line 3: syntax error at or near *
awk: line 3: syntax error at or near *
awk: line 3: syntax error at or near *
awk: line 3: syntax error at or near *
awk: line 4: syntax error at or near *
./minne.sh: rad 99: printf: ibus-x11: ogiltigt tal
och så fortsätter det rad efter rad....

tips vad jag kan kontrollera?
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Vilka processer som tar mest minne....

Inlägg av Osprey »

skalman65 skrev:och så fortsätter det rad efter rad....

tips vad jag kan kontrollera?
Prova med:

Kod: Markera allt

awk -W version
för att se vilken version av awk du har...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
skalman65
Inlägg: 1050
Blev medlem: 15 jan 2008, 23:18
OS: Annat GNU/Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalix

Re: Vilka processer som tar mest minne....

Inlägg av skalman65 »

Osprey skrev:Prova med:
Kod:
awk -W version
för att se vilken version av awk du har...

Kod: Markera allt

mawk 1.3.4 20200120
Copyright 2008-2019,2020, Thomas E. Dickey
Copyright 1991-1996,2014, Michael D. Brennan

random-funcs:       srandom/random
regex-funcs:        internal
compiled limits:
sprintf buffer      8192
maximum-integer     2147483647
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Vilka processer som tar mest minne....

Inlägg av Osprey »

Det behövs nog GNU Awk för att det ska funka.

Kör:

Kod: Markera allt

sudo apt-get install gawk
och prova sedan igen...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
skalman65
Inlägg: 1050
Blev medlem: 15 jan 2008, 23:18
OS: Annat GNU/Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalix

Re: Vilka processer som tar mest minne....

Inlägg av skalman65 »

Guld Osprey ;D ;D

Det löste det .

Kod: Markera allt

MEMORY             PID     COMM                CMD
------             ---     ----                ---
21.85 Mb          1754     unity-panel-ser     /usr/lib/x86_64-linux-gnu/unity/unity-panel-service
22.16 Mb          1631     unity-settings-     /usr/lib/unity-settings-daemon/unity-settings-daemon
23.40 Mb          1926     nemo-desktop        nemo-desktop
24.27 Mb          1420     ibus-x11            /usr/libexec/ibus-x11
25.04 Mb          1809     evolution-alarm     /usr/libexec/evolution-data-server/evolution-alarm-notify
28.23 Mb          1417     ibus-extension-     /usr/libexec/ibus-extension-gtk3
28.66 Mb          1415     ibus-ui-gtk3        /usr/libexec/ibus-ui-gtk3
30.18 Mb           870     snapd               /usr/lib/snapd/snapd
30.46 Mb         10603     WebExtensions       /usr/lib/firefox/firefox
33.85 Mb         11861     Web Content         /usr/lib/firefox/firefox
42.97 Mb         10550     Privileged Cont     /usr/lib/firefox/firefox
56.94 Mb          1176     Xorg                /usr/lib/xorg/Xorg
56.99 Mb         12034     Web Content         /usr/lib/firefox/firefox
59.63 Mb          9886     fwupd               /usr/libexec/fwupd/fwupd
63.98 Mb         10687     Web Content         /usr/lib/firefox/firefox
65.58 Mb         12135     nautilus            /usr/bin/nautilus
118.07 Mb         1747     compiz              /usr/bin/compiz
192.08 Mb         1902     snap-store          /snap/snap-store/547/usr/bin/snap-store
201.40 Mb         2707     gnome-software      /usr/bin/gnome-software
293.51 Mb        10454     GeckoMain           /usr/lib/firefox/firefox
När jag gick igenom listan så reagerade jag på att Firefox behövde så mycket minne. Men antar att det är ganska lite, när jag jämförde med den utskrift du la upp.
Nu gissar jag att du sitter med en maskin som är ljusår snabbare än den jag använder,
men hur kommer det sig att Firefox bygger på så mycket minne?
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Vilka processer som tar mest minne....

Inlägg av Osprey »

skalman65 skrev:Guld Osprey ;D ;D

Det löste det .
Kul att det funkade! :D
skalman65 skrev:När jag gick igenom listan så reagerade jag på att Firefox behövde så mycket minne. Men antar att det är ganska lite, när jag jämförde med den utskrift du la upp.
Nu gissar jag att du sitter med en maskin som är ljusår snabbare än den jag använder,
men hur kommer det sig att Firefox bygger på så mycket minne?
Njaaeee, det fungerar ju som så att operativet utnyttjar så mycket minne som finns. Så procentuellt är det nog inte så stor skillnad i din och min dator. Grunden i det hela är ju att minne som inte används, har man ingen nytta av...

Min burk är en ganska enkel burk, men den har 16 Gb minne (ROM) och då används det. Alternativet är att mer hade "hamnat i swappen", eller för den delen legat kvar på disk. Prestandamässigt är det ju förstås en fördel ju mer man kan ha i minnet, men å andra sidan så är det inte helt säkert att allt som ligger där behöver ligga där...

Att Firefox utnyttjar så mycket minne beror just på att det finns minne tillgängligt och så länge det finns, så låter Firefox (och systemet) saker ligga kvar där och Chromium jobbar också på ungefär samma sätt (fast inte uppdelat i riktigt lika många delar). Fördelen med det här är att det går något snabbare när du växlar mellan olika flikar etc. Men både Firefox och Chromium vinner mycket på att man startar om dem lite då och då och då undkommer man också behovet av stort minne...

Räknar man ihop alla processers "virtual memory", dvs. det minne de har tillstånd att utnyttja, så hamnar man långt över datorns maximala kapacitet. Det här scriptet bygger ju på "PSS" vilket är en balanserad beräkning av "RSS" plus en proportionerlig del av "shared memory" plus "shared libraries", dvs. den rimligaste uppskattning man kan få, av hur mycket minne en process utnyttjar...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Skriv svar

Återgå till "Terminalforum"