2011-10-21 13 views
33

Rが関数を呼び出すために使用中または使用されていたメモリ量を監視できますか?例えば、私は任意の関数を持って、例えば:機能を実行Rのメモリ使用量を監視するR

smallest.sv <- function(){ 
    A <- matrix(rnorm(1e6), 1e3); 
    mysvd <- svd(A); 
    return(tail(mysvd$d, 1)); 
} 

は、単純にスカラーを返しますが、多くのメモリは、関数を計算するために使用されました。今私はパフォーマンスのベンチマークを行う必要があります。処理時間は簡単です:私も機能を変更せずに、このコールのために必要だったどのくらいのメモリ知りたいのですが

system.time(x <- smallest.sv()) 

(それは、任意の機能のために働く必要があります)。これを行う方法はありますか?

編集:少し明確にする。私は、関数の呼び出し中に使用されていたメモリの上限、つまり関数呼び出しを処理するために必要な物理メモリの量にほとんど関心があります。多くの場合、これは私が思っている割り当てられたメモリの総量よりもかなり少ないです。

+0

こんにちは。あなたはこの問題を解決しましたか?あなたの解決策は何でしたか?私もこの問題に直面しています。私は関数の呼び出し中に使用されたメモリの上限を監視したい。 –

+0

プロフェッショナルを見てください:https://github.com/rstudio/profvis – Jeroen

+0

ありがとう、ジェーソン。私は前にそれをチェックした。しかし、パッケージは、コードで使用されている時間のプロファイリングにのみ使用されるようです。私はメモリモニタリングの機能を見ていませんでした。私はここで何かを逃しましたか?または、私にさらにヒントを与えることができますか? –

答えて

19

Rメモリプロファイリングのサポートを提供し、Section 3.3 of the Writing R Extensions manual参照:コードは、好都合に利用可能であるよりも 多くのメモリをとる場合

3.3メモリー用プロファイリングRコード

Rコードでメモリ使用量を測定することは、いずれか有用ですまたはメモリ割り当て とオブジェクトのコピーが遅いコードの原因である場合Rコードで時間の経過と共にメモリ使用をプロファイリングする方法は3つあります( )。 3つのすべては、Rに がデフォルトの ではなく、現在はMac OS XとWindowsバイナリ ディストリビューションで使用されている `--enable-memory-profiling 'でコンパイルされている必要があります。さまざまな理由から、すべてが誤解を招く可能性があります。

メモリのプロファイルを理解するには、Rのメモリ割り当てについて、少しだけ を知っておくと便利です。 `gc() 'の結果を見ると、 は ベクトルの内容を格納するために使われる` Vcells'と、その他すべてのものを格納するために使われる `Ncells 'のメモリの分割を示します。 長さ 実際、ベクトルの内容は2つのプールに分割されています。 大きなチャンクで小さいベクトル(デフォルトでは128バイト以下)のメモリが得られ、Rで区切られます。より大きなベクトルのメモリは、オペレーティングシステムから直接得られる です。

さらに3つのセクションがあります。

10

1つのオプションは、Rprofです。簡単なアプローチは次のとおりです。

Rprof(tf <- "rprof.log", memory.profiling=TRUE) 

[your code] 

Rprof(NULL) 
summaryRprof(tf) 

これは、メモリの使用に関するいくつかの情報を提供します。

+0

ありがとう、これは便利です。しかし、私が理解しているように、Rprofmemは割り当てられたすべてのメモリをログに記録しますが、それは考慮に入れません。私は主に、関数の処理中に使用されているメモリの上限に関心があります。 – Jeroen

+2

OSのパフォーマンスモニタを使用できます。操作の前に読者を、後に読者を連れてください。 Windows上ではperfmonです – SFun28

関連する問題