Linux에서 세션당 CPU 및 메모리 사용량의 비율을 계산하려면 bash에서 스크립트를 작성해야 합니다.
이 정보를 얻기 위해 스크립트에서 어떤 표준 UNIX 도구를 사용할 수 있습니까?
나는 이것을 가지고있다
ML_CPU=$(ps -e -o pcpu= | awk '{sum+=$1} END {print sum}')
...하지만 한 세션에 대한 CPU 비율을 얻을 수 없습니다(예: pts/1
.
답변1
다음 명령의 출력을 구문 분석하면 필요한 정보를 얻을 수 있습니다.
$ free
$ top -bn 1
또한 살펴 보면 cron
특정 간격으로 명령을 실행하는 방법입니다. 해당 세션에 대한 통계를 기록할 각 사용자에 대해 crontab을 만들어야 할 수도 있습니다.
업데이트:
여기서 원하는 것이 무엇인지 잘 모르겠습니다. 당신이 필요로하는 경우현재의각 pts/tty의 CPU %는 아래 스크립트를 사용해 보세요. 수집해야 하는 경우총사용자 세션의 CPU 및 MEM 비율은 cron을 조사합니다.
이것은 PERL 스크립트입니다.필요BASH가 알려주세요.
#!/usr/bin/perl -w
## Collect ps output
open(A, "ps xo pcpu,pmem,tty |");
my %stats;
while (<A>){
## Ignore 1st line
next if $.==1;
## Remove new line character (\n)
chomp;
## Get the CPU% and TTY
/\s*(.+)\s(.+)\s(.+)$/;
## Add the CPU% ($1) and MEM% ($2) for each TTY ($3)
$stats{$3}{CPU}+=$1;
$stats{$3}{MEM}+=$2;
}
close(A);
## Sort output by CPU%. Use 'sort -nk 5' for MEM%
open(A, "| sort -nk 3");
## The keys of the %stats hash are the different
## TTYs (including '?'). Cycle through and print
foreach (keys(%stats)) {
print A "$_\tCPU%: $stats{$_}{CPU} \tMEM%: $stats{$_}{MEM}\n";
}
내 시스템에서는 다음을 얻습니다.
$ ./cpu_percent.pl
pts/0 CPU%: 0 MEM%: 0
pts/2 CPU%: 0 MEM%: 0
pts/3 CPU%: 0 MEM%: 0
pts/4 CPU%: 0 MEM%: 0
pts/5 CPU%: 0 MEM%: 0
pts/7 CPU%: 0 MEM%: 0
pts/8 CPU%: 0 MEM%: 0
tty3 CPU%: 0.3 MEM%: 0
pts/6 CPU%: 0.8 MEM%: 0.5
pts/1 CPU%: 0.9 MEM%: 0.5
? CPU%: 14.7 MEM%: 15.4