(プロセスではなく)コマンドのグループの概要メモリ使用量を表示する方法


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

これにより、1行に1つずつ、大量のメモリ使用率が得られます。

そのようなデータを合計する方法は数多くあります。私が頻繁に使用する方法の1つは、xargsにパイプして、スペースで区切られた要素を持つ1行に変換し、次に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開発者なので、通常、少なくともいくつかのJavaプログラムを実行しています)。完璧な解決策はないと思います...
korda

ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...たとえば、fooというJavaプログラムを探すことは常にあります。
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

これにより、最高のメモリ使用量アプリケーションが得られます。


私はこれを機能させるように試みました、そしてそれは私に興味深い結果を与えませんでした。例えば、それは1つのプログラムだけを示しており、それはメモリのほとんどを取っものではありません
コルダ

それは...ですか?さてあなたはトップのようなものが欲しいですか?はいの場合、2秒または1秒の遅延でスクリプトを変更し、しばらくしてから同じことを実行できます。私にとっては、このスクリプトを実行したときに最もメモリ使用量の多いアプリケーションが表示されます。どんな種類のものを試しているのか、実行してください:ps af -o pmem、cmd | sort -rそれはあなたに最高の
メモリ

うまくいきません。理由は、ソートには先頭の空白が含まれるためだと思います
korda

プロセスの正しい名前を取得していないということですか?
RahulAN、2015年

はい、psはスペースをインデントに追加します。1つのプロセスに2桁の使用法がある場合、1桁の使用法の値がインデントされ、先頭のスペースで始まります。私は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.