メモリ計算スクリプト

メモリ計算スクリプト

プロセスの簡単な説明でスクリプトを解決しようとしています。 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. リストの末尾にゼロを追加します。

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今後は1桁の数字でのみ表示されます.。したがって、これはメモリをほとんど使用しないプロセスの場合、精度が非常に低くなります。たとえば、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を使用してテスト済み)

関連情報