메모리 계산 스크립트

메모리 계산 스크립트

프로세스에 대한 간단한 설명으로 스크립트를 해결하려고 합니다. Linux를 처음 사용하기 때문에 뭔가 잘못했을 수도 있습니다.

Firefox 메모리 사용량을 계산하는 memory.sh 스크립트를 만듭니다(총 메모리 대비 백분율).

1. 프로세스 및 메모리 사용량 나열(백분율로 표시)

ps -e -o pmem,args |

2. 이 목록에서 firefox라는 단어가 포함된 줄을 검색하세요.

ps -e -o pmem,args | grep -i firefox

3. 메모리 사용량을 보여주는 열만 사용하세요

ps -e -o pmem,args | grep -i firefox | grep -v grep

4. +를 추가하여 목록의 각 항목을 표시합니다.

5. 목록 끝에 0을 추가합니다.

6. 새 줄을 시작하고 종료를 추가하세요.

7. 계산하기

답변1

GNU/Linux에서는 다음을 사용하십시오 zsh.

printf 'Total: %.3g%%\n' ${(j[+])${(f)"$(
  pgrep -f firefox | LC_ALL=C xargs -r ps -o pmem=
)"}}

어디:

  • pgrep -f firefox인수 목록에 포함된 프로세스의 pid를 보고합니다.firefox
  • xargs -r해당 항목(있는 경우)을 인수로 전달합니다.ps
  • ps -o pmem=메모리 사용량 백분율을 출력합니다( 향후 교정을 위해 .소수점 기본 문자가 포함된 영어 형식 LC_ALL=C).
  • "$(...)"ps인용으로 인해 IFS 분할이 비활성화된 상태에서 출력을 캡처합니다 .
  • ${(f)...}대신 개행 문자로 분할하세요.
  • ${(j[+])...}결과 단어를 다음과 연결하십시오.+
  • $(( ... ))결과는 산술 표현식으로 해석됩니다.
  • printf 'Total: %.3g%%\n'기본 3자리 정밀도로 인쇄됩니다.

pmem이제 그 뒤에는 한 자리 숫자로만 표시된다는 점에 유의하세요 .. 따라서 이는 자체적으로 메모리를 거의 사용하지 않는 프로세스의 경우 정확도가 매우 낮습니다. 예를 들어, 4GiB 시스템에서 100KiB 또는 2MiB를 사용하는 프로세스는 0.0%의 메모리를 사용하는 것으로 간주되고, 2MiB를 사용하는 200개의 프로세스는 400MiB를 사용하므로 10%가 되지만 위에서 계산한 합계는 0이 됩니다.

더 나은 정확성을 위해 rss모든 프로세스의 누적을 계산하고 다음을 수행해야 합니다 hand.

pattern=firefox
used=$((
  ${(j[+])${(f)"$(
    pgrep -f -- "$pattern" | LC_ALL=C xargs -r ps -o rss=
  )"}}
))
grep '^MemTotal:' /proc/meminfo | read x total x
printf 'Total: %.3g%%\n' 'used * 100. / total'

답변2

한 번 시도해 보세요. 형식 지침을 어느 정도 따릅니다(출력 형식 예제가 없으면 어렵습니다).추측하다정확히 무엇을 기대하셨나요?):

$ \ps -eo pmem,args | awk '/[Ff]irefox/ {totmem+=$1;printf "%s+", $1} 
                           END{printf "%s%2.1f%s\n", "0=",totmem,"%"}'
4.0+0.3+0.8+1.1+1.2+1.0+1.0+0.5+0.5+0.5+0=10.9%     # example output w/o the one liner's own memory consumption

그러나 총계를 직접 생성할 수도 있습니다.

$ \ps -eo pmem,args | awk '/[Ff]irefox/ {totmem+=$1}
                           END{print "total memory used:",totmem,"%"}'
total memory used: 10.9 %         # example output

(GNU Awk 5.1.1을 사용하여 테스트됨)

관련 정보