2017-09-14 14 views
1

(a) bash JAVA jar (이후 my_shell_script)를 호출하는 쉘 스크립트와 (b) 다른 함수를 가져 오는 Python 스크립트 파이썬 패키지는 파이썬 이외의 패키지 나 소프트웨어 (이하 my_Python_script)를 호출하지 않습니다. 두 스크립트 모두 같은 목적을 가지고 있습니다. 동일한 입력 (이하 testinput)을 사용하고 대략 동일한 출력을 생성합니다.동일한 작업을 위해 쉘 스크립트와 Python 스크립트의 메모리 사용량 비교

두 스크립트의 메모리 사용량을 측정 할 때 시간의 함수로 비교하고 싶습니다.

는이를 위해, I는 ms_print 통해 괴 출력 요약 하였다 (밀리 초까지의 time_unit 설정)를 사용 massifvalgrind 개재 스크립트를 실행한다.

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의 경우에는 해당되지 않습니다 Valgrind의/대산 괴 기록하는 동안. htop에 대한 통계는 my_shell_script 실행 중 GB의 메모리 사용을 나타내지 만 valgrind/massif는 사용 된 메모리가 수십 MB에 불과합니다.

따라서 valgrind/massif는 bash 코드의 메모리 사용을 기록하지만 bash 코드가 호출하는 JAVA jar가 아닌 것으로 판단됩니다.

my_shell_script의 메모리 사용량을 시간의 함수로 올바르게 측정하려면 어떻게해야합니까?

답변

0

옵션 --trace-children = yes | no는 하위 항목을 추적하거나 표시하지 않습니다. 기본값은 no입니다. 즉, 스크립트를 실행하는 셸은 이 valgrind에 있지만 실행 된 python 또는 java 프로세스는 아닙니다.

그래서 --trace-children = yes를 지정하십시오.

예 : a massp out file 인수에 % p를 입력해야합니다. 그렇지 않으면 모든 파일 (예 : 쉘과 그 하위 파일)이 제대로 작동하지 않는 동일한 파일에 쓰게됩니다.