Jeg har lige sidddet med en hade-opgave.
Jeg har en masse Linux-maskiner, hvor jeg kan logge ind på hver af dem med ssh, og jeg vil vide hvor meget RAM, der bruges af den process med mest RAM-forbrug - for hver maskine.
Bemærk at Lixtallet stiger en kende ned igennem indlægget...
<nørd-mode>
Töse-løsningen er login til maskine et - kør top, tryk "M" og se hvad der står øverst. Hvis man har mere end 100 maskiner, så er det ikke bare en hade-løsning med en stupid løsning.
Jeg ved godt at min gamle ven Ole Tange have lavet programmet "parallel" (se hjemmesiden for GNU parallel, men aldrig haft brug for det før i dag,
Og jeg er super glad allerede.
Først lavede jeg den UNIX/Linux kommando, der kan vise mig den mest forslugne process:
$ ps -e -orss=,args= | sort -b -k1,1n | tail -n 1 1714040 gdb simu
Med andre ord "gdb simu" æder 1,7GB hukommelse. Hvis I kan ændre kommandoen til også at vise hvor lang tid den har kørt kunne det være bedre.
Næste delopgave er at kaste alle maskin-navne ned i en fil "mycomputers.txt". Jeg havde heldigvis listen i forvejen.
$ cat mycomputers.txt sim001 sim002 sim003 ... sim-sindsygtmange....
GNU Parallel er super nem at oversætte på en normal Linux-maskine: udpak med "tar xvjf", derefter "configure;make;sudo make install".
$ parallel --tag --nonall --sshloginfile mycomputers.txt \ "ps -e -orss=,args= | sort -b -k1,1n | tail -n 1"
Som det kan ses at det sidste argument den kommando, der skal udføres på hver enkelt maskine. De "halv-skumle" argumenter til "parallel" dvs "--tag --nonall" fandt jeg på den udmærkede man-side til programmet.
Output af mit saftige program er noget ala
$ parallel ... | tee out.txt sim001 5540 ntpd -u ntp:ntp -p /var/run/ntpd.pid sim002 1265084 ics sim003 5540 ntpd -u ntp:ntp -p /var/run/ntpd.pid sim004 48222660 /usr/bin/gdb --quiet sim ...
Det kan nævnes, at jeg ikke orkede at trykke "yes" til hver enkelt ssh-login og derfor har jeg rettet lidt i min SSH opsætning:
$ cat ~/.ssh/config StrictHostKeyChecking no
Jeg ved godt at der er et sikkerheds-issue i dette - life is tough...
Idet der kom for mange linier ud, og jeg reelt kun var interesseret i at finde de maskiner, med ekstreme processer, så endte jeg med at filtre min "out.txt" en gang til:
$ cat out.txt | awk '{print $2 " " $1}' | sort -n | tail -n 5 5540 sim019 5540 sim003 5540 sim001 1265084 sim002 48222660 sim004
Så endelig har jeg en nem oversigt over at sim004 åbenbart kører en diskret lille 48 GB proces.
</nørd-mode>
Hvad kan jeg sige... Unix er nemt :-)
/pto

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.