프로세스 대신 명령 그룹의 요약 메모리 사용량을 보는 방법


10

top / htop과 같은 도구를 사용할 때 유사한 프로세스를 그룹화하는 방법이 있습니까? 때로는 메모리를 소비하는 것을 알고 싶고 일부 프로그램 (주로 브라우저)은 여러 프로세스를 사용하고있어 실제로 사용하는 RAM의 양을 읽기가 어렵습니다.

지금까지 나는 다음과 같은 것을 생각해 냈습니다.

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc

답변:


7

ps -C특정 명령 이름에 대한 프로세스 정보 만 표시 하는 데 사용할 수 있습니다 .

예 :

ps -C opera

그런 다음 다른 ps옵션을 사용하여 원하는 데이터 만 추출 할 수 있습니다 . 특히, h또는 --no-headers열 헤더를 억제하고, -o pmem프로세스에 의해 사용되는 메모리의 백분율을 표시.

ps -C opera --no-headers -o pmem

그러면 줄당 하나씩 많은 메모리 사용률이 제공됩니다.

데이터를 합산하는 수많은 방법이 있습니다. 자주 사용하는 방법 중 하나는 xargs로 파이프하여 공백으로 구분 된 요소가있는 한 줄로 변환 한 다음 sed로 변환하여 공백을 +기호 로 변환 한 다음 bc수행하는 것입니다. 계산. 배관 paste -sd+작업 방법은 물론 또는 다른 방법 보다 낫습니다 | xargs | sed.

이 모든 것을 종합하면 다음과 같은 이점이 있습니다.

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

또는

ps -C opera --no-headers -o pmem | paste -sd+ | bc

즉, ps -C특정 실행중인 프로그램에 대한 데이터 만 원하는 경우 여러 greps 대신 사용할 수 있습니다 .

참고 : -C한 번에 둘 이상의 프로그램에 대한 정보를 원하는 경우 동일한 명령 줄에서 여러 옵션을 사용할 수 있습니다 . 예 :

ps -C iceweasel -C chromium -C opera

예, 실제로 내 질문을 이해하고 읽은 첫 번째 사람!
korda

이 접근법으로 볼 수있는 유일한 문제는 일부 프로그램에 동일한 명령이 있지만 그룹화하고 싶지는 않다는 것입니다 (예 : java ... 그리고 자바 개발자이기 때문에 일반적으로 적어도 몇 개의 Java 프로그램이 실행 중입니다). 완벽한 해결책은 없을 것 같습니다 ...
korda

ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...예를 들어 항상 foo라는 자바 프로그램을 찾는 것이 있습니다.
cas

0

쉘 스크립트를 만들 수 있습니다

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

이것은 가장 높은 mem 사용량 응용 프로그램을 제공합니다.


이 작업을 시도했지만 흥미로운 결과를 얻지 못했습니다. 예를 들어, 그것은 단지 하나 개의 프로그램을 보여 주며, 이는 메모리의 가장 복용 아니다
KORDA

그렇습니까? 그럼 당신은 상단과 같은 것을 원하십니까 ?? 그렇다면 2 초 또는 1 초 지연으로 스크립트를 수정하고 일부 동안 또는 동안 동일한 것을 실행할 수 있습니다. 나 에게이 스크립트를 실행할 때 가장 높은 메모리 사용량 응용 프로그램을 보여줍니다. 어떤 종류의 작업을 시도하고 있습니까? 그냥 실행하십시오 : ps af -o pmem, cmd | sort -r 그것은 당신에게 최고의 mem 사용법을 줄 것입니다
RahulAN

그것은 나를 위해 작동하지 않습니다. 내가 생각하는 이유는 일종의 선행 공백이 포함되어 있다는 것입니다
KORDA

올바른 프로세스 이름을 얻지 못했습니까?
RahulAN

예, ps는 공간을 추가하여 물건을 들여 쓰기합니다. 하나의 프로세스에 2 자리 사용량이 있으면 한자리 사용량 값이 들여 쓰기되고 선행 공백으로 시작됩니다. 같은 것을 추가 sed -e 's/^[[:space:]]*//'하면 문제가 해결되어야합니다. 또한 스크립트는 동일한 명령으로 프로세스의 메모리 사용량을 추가합니까?
korda

0

내부에서 다음을 사용할 수 있습니다.

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

시도해 볼 수도 있습니다.

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

이 명령은 메모리 사용량별로 상위 5 개의 프로세스를 제공합니다.

이 정보가 도움이 되었기를 바랍니다.


0

termsql 로 단순화 할 수 있습니다 .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

현재는 PyPI에 업로드되지 않으며 다음 과 같이 시스템 전체에만 설치할 수 있습니다 ( setup.py약간 깨졌습니다) sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.