From 0ff5c170d3bdc4474cba98a74578a967b2007e21 Mon Sep 17 00:00:00 2001 From: midoks Date: Sun, 27 Aug 2023 14:28:26 +0800 Subject: [PATCH] update --- plugins/dynamic-tracking/index.py | 17 +++++++++ .../dynamic-tracking/shell/simple_trace.sh | 35 +++++++++++++++++++ .../dynamic-tracking/static/html/index.html | 6 ++-- .../static/js/dynamic-tracking.js | 5 +++ 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 plugins/dynamic-tracking/shell/simple_trace.sh diff --git a/plugins/dynamic-tracking/index.py b/plugins/dynamic-tracking/index.py index 2b22f6d47..25a56e501 100755 --- a/plugins/dynamic-tracking/index.py +++ b/plugins/dynamic-tracking/index.py @@ -176,6 +176,21 @@ def dtFileList(): return mw.returnJson(True, 'ok!', file_info) +def dtSimpleTrace(): + args = getArgs() + data = checkArgs(args, ['pid']) + if not data[0]: + return data[1] + + plugins_shell = getPluginDir() + '/shell/simple_trace.sh' + cmd = plugins_shell + ' "' + args['pid'] + '"' + + print(cmd) + data = mw.execShell("bash " + cmd) + print(data) + return mw.returnJson(True, '执行成功!') + + if __name__ == "__main__": func = sys.argv[1] if func == 'status': @@ -206,5 +221,7 @@ if __name__ == "__main__": print(dtGetFilePath()) elif func == 'remove_file_path': print(dtRemoveFilePath()) + elif func == 'simple_trace': + print(dtSimpleTrace()) else: print('error') diff --git a/plugins/dynamic-tracking/shell/simple_trace.sh b/plugins/dynamic-tracking/shell/simple_trace.sh new file mode 100644 index 000000000..1b10aef68 --- /dev/null +++ b/plugins/dynamic-tracking/shell/simple_trace.sh @@ -0,0 +1,35 @@ +#!/bin/bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH + + +# debug +# /Users/midoks/Desktop/mwdev/server/mdserver-web/plugins/dynamic-tracking/shell/simple_trace.sh "22431" + +# dtrace -x ustackframes=100 -n 'pid$target::mach_msg_trap:entry { @[ustack()] = count(); } tick-30s { exit(0); }' -p 18572 -o out.SystemUIServer_stacks +# /Users/midoks/Desktop/mwdev/server/dynamic-tracking/FlameGraph/stackcollapse.pl out.SystemUIServer_stacks > kernel.cbt +# /Users/midoks/Desktop/mwdev/server/dynamic-tracking/FlameGraph/flamegraph.pl kernel.cbt > kernel.svg + +curPath=`pwd` +rootPath=$(dirname "$curPath") +serverPath=$(dirname "$rootPath") + +sysName=`uname` +PID=$1 + +echo $rootPath # /Users/midoks/Desktop/mwdev/server +echo $curPath # /Users/midoks/Desktop/mwdev/server/mdserver-web + +APP_DIR=${rootPath}/dynamic-tracking +DST_FILE_DIR=${APP_DIR}/trace/PID_${PID} +mkdir -p $DST_FILE_DIR + +DST_FILE=${DST_FILE_DIR}/out.SystemUIServer_stacks + +if [ ! -f $DST_FILE ];then + sudo dtrace -x ustackframes=100 -n 'pid$target::mach_msg_trap:entry { @[ustack()] = count(); } tick-30s { exit(0); }' -p "$PID" -o $DST_FILE +fi + +${APP_DIR}/FlameGraph/stackcollapse.pl $DST_FILE > ${DST_FILE_DIR}/kernel.cbt +${APP_DIR}/FlameGraph/flamegraph.pl ${DST_FILE_DIR}/kernel.cbt > ${DST_FILE_DIR}/main.svg + diff --git a/plugins/dynamic-tracking/static/html/index.html b/plugins/dynamic-tracking/static/html/index.html index a945ac923..2560182d5 100644 --- a/plugins/dynamic-tracking/static/html/index.html +++ b/plugins/dynamic-tracking/static/html/index.html @@ -28,8 +28,8 @@ @@ -70,8 +70,6 @@ oallowfullscreen="oallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" allowfullscreen="true"> - - diff --git a/plugins/dynamic-tracking/static/js/dynamic-tracking.js b/plugins/dynamic-tracking/static/js/dynamic-tracking.js index 5863dc6a2..1c9576ce2 100755 --- a/plugins/dynamic-tracking/static/js/dynamic-tracking.js +++ b/plugins/dynamic-tracking/static/js/dynamic-tracking.js @@ -33,6 +33,11 @@ function dynamicTrackingLoad(){ $('.data-collect').click(function(){ layer.msg('开始采样',{icon:0,time:2000}); + var pid = $('#searchValue').val(); + + dtPost('simple_trace', '', {pid:pid}, function(rdata){ + console.log(rdata); + }); });