0

たとえば、Linux でメモリを大量に消費する 3 ~ 4 個のアプリケーションが実行されているとします。たとえば、任意のビデオ処理アプリケーションです。これらのアプリケーションは異なる量の RAM を使用しており、それらのメモリ アクセス パターンも異なります。また、これらのアプリケーションが異なるコアで実行されているとしましょう。

これらすべてのプログラムが 5 秒間実行されるとしましょう。

私が見つけようとしているもの -

  1. これらのアプリケーションのうち、特定の瞬間に最大のメモリを使用する機能はどれですか? 最大のメモリ リソースを使用している最初の 2 ~ 3 個の関数の名前が必要です。

  2. 複数の関数が同時に大量のメモリ (しきい値の制限を超える) を必要とする場合、それらの関数の名前とその大量のメモリが必要な期間。

これについて助けが必要です – 実際に進め方がわかりません. perf ツールを使用したキャッシュ ミスの計算は役に立ちますか? 私はLinuxが初めてなので、少し説明を書いてください。前もって感謝します。

4

2 に答える 2

1

プロセスのメモリ消費量を調べるためにps(おそらくwatch) またはtopまたはを使用できます。htopたとえば、pid 1234、2345、および 3456 の3 つのプロセスps|grep programnameがある場合 (またはpidofまたはpgrepなどを使用してこれらの pid を見つけることができます)、次のように実行できます。

watch ps -F 1234 2345 3456

これらのアプリケーションのうち、特定の瞬間に最大のメモリを使用する機能はどれですか?

複数の関数が大量のメモリを必要とする場合

コード内の C (または C++) 関数について話していると思います。その場合、上記の両方の質問には意味がありません。メモリ消費は、プログラムのグローバルプロパティです。(そしてこれはよく起こります)ある関数でメモリゾーンが割り当てられ( を呼び出すmalloc)、別の関数で埋められ、さらに別の関数で解放されます( を呼び出すfree)場合、どの関数がそのデータを所有しているか、そのメモリを消費しているかを言うのは意味がありません。 .

valgrindを使用することもできます(少なくとも、メモリ リークがないことを確認するため)。

また、プログラムが正しく呼び出された場合、解放されたメモリが常に OS に返されるとは限らないことに注意してくださいmallocfreeほとんどの実装では、将来の呼び出しですぐに再利用できるように -d メモリをmalloc「保持」しようとします。freemalloc

ガベージ コレクションメモリ リークメモリ管理、特にC の動的メモリ割り当てに関するウィキページを読んでください。RTFM malloc(3) & mmap(2) (mmapによって使用されるためmalloc) & proc(5) (/proc/メモリマップと状態のクエリに使用できるため、cat /proc/$(pidof yourprogram)/mapsその他を使用...) & setrlimit(2) (これにより、たとえば、ulimitビルトインのbash、使用可能なメモリ) & ps(1) & watch(1) & pgrep(1) & pidof(1) . 高度な Linux プログラミングもお読みください

于 2015-02-13T06:17:52.873 に答える