2017-09-14 7 views
1

(a)a bash JAVA jar(以下、my_shell_script)を呼び出すシェルスクリプト、および(b)他の関数をインポートするPythonスクリプトPythonパッケージですが、Python以外のパッケージやソフトウェア(以下my_Python_script)は呼び出しません。両方のスクリプトは同じ目的を持っています:同じ入力(以下、testinput)を取り、おおよそ同じ出力を生成します。同じタスクのシェルスクリプトとPythonスクリプトのメモリ使用量の比較

私は両方のスクリプトのメモリ使用量を時間の関数として測定して比較したいと思います。

このため、massif(time_unitをミリ秒に設定)を使用してvalgrindで各スクリプトを実行し、その後に大量出力の概要をms_printで指定します。 valgrindの/山塊記録しながら

INF=testinput 

# Testing Shell script 
valgrind --tool=massif --pages-as-heap=yes --time-unit=ms --massif-out-file=${INF}_shell.out bash my_shell_script -f $INF -j my_java_jar 
ms_print --threshold=50.0 ${INF}_shell.out > ${INF}_shell.summary 

# Testing Python script 
valgrind --tool=massif --pages-as-heap=yes --time-unit=ms --massif-out-file=${INF}_Python.out python2 my_python_script $INF 
ms_print --threshold=50.0 ${INF}_Python.out > ${INF}_Python.summary 

私はhtop経由で見たものと大体一致しているmy_python_scriptのメモリ使用量、これはmy_shell_scriptの場合はそうではありません。 htopの統計情報は、実行中のGBのメモリ使用量がmy_shell_scriptであることを示していますが、valgrind/massifはわずか数十MBのメモリしか使用していません。

したがって、私はvalgrind/massifがbashコードの呼び出しのメモリ使用量を記録していると考えていますが、bashコードが呼び出しているJAVA jarのメモリ使用量は記録していないと考えられます。

my_shell_scriptのメモリ使用量を時間の関数として正しく測定するにはどうすればよいですか?

答えて

0

オプション--trace-children = yes | noは、子をトレースする(またはしない)ことを示します。デフォルト値はnoです。つまり、スクリプトを実行するシェルは がvalgrindになりますが、起動されたPythonまたはJavaプロセスにはなりません。だから、

、はい= --trace-子どもを指定します。

(例えば、シェルとその子プロセス)はすべて同じファイルに書き込みますが、これは正しく動作しません。

関連する問題