并发解析hea,转为pdf格式
由于每次解析一个heap需要时间有点久,就写了一个自动解析程pdf的一个脚本。
down_lib.sh是需要自己写的哦,主要是用于下载自己所需程序的库,用于解析heap。
#!/bin/bash # 优化版通用解析脚本(并发加速):批量生成 heap profile 的 PDF 报告 # down_lib.sh, heapjx.sh 放到同一目录下。 # 用法示例: ./heapjx.sh /app/heap START_TIME=$(date +%Y-%m-%d_%H:%M:%S) echo "开始生成 heap profile PDF 报告... 时间戳:${START_TIME}" set -euo pipefail # 自动查找 pprof_x86 路径 PPROF="$(find ~/ -name pprof_x86 2>/dev/null | head -n1)" if [[ -z "${PPROF}" ]]; then echo "未找到 pprof_x86 工具,请检查环境!" exit 1 fi EXEC="${EXEC:-./ndm_locmap_lib/ndm_locmap}" HEAP_DIR="${HEAP_DIR:-./heap}" PDF_DIR="${PDF_DIR:-./pdf}" NDM_LOCMAP_DIR="${NDM_LOCMAP_DIR:-./ndm_locmap_lib}" LIB_PREFIX="${LIB_PREFIX:-./ndm_locmap_lib}" OPTS="--pdf --show_bytes --lib_prefix=${LIB_PREFIX}" USERNAME="${USERNAME:-root}" HOST="${HOST:-192.168.2.62}" YCHEAP_DIR="${YCHEAP_DIR:-/app/heap/heap/}" # 自动创建必要目录 mkdir -p "${PDF_DIR}" "${NDM_LOCMAP_DIR}" # 拉取heap文件目录 # 如果当前目录下没有 heap 目录,才拉取 echo "62板子上的heap目录: $1" if [[ ! -d ./heap ]]; then echo "未检测到 heap 目录,执行拉取..." scp -r "${USERNAME}@${HOST}:$1" . else echo "heap 目录已存在,跳过拉取" fi # 判断 ndm_locmap_lib 目录下是否有文件,无文件才拉库 if find ./ndm_locmap_lib -maxdepth 1 -type f | grep -q .; then echo "ndm_locmap_lib 目录下已有文件,跳过拉取依赖库步骤" else if [[ -x ./down_lib.sh ]]; then echo "拉取依赖库..." bash ./down_lib.sh ndm_locmap root 192.168.2.62 ./ndm_locmap_lib || \ echo "警告: down_lib.sh 执行失败,跳过拉取依赖库步骤" else echo "警告: down_lib.sh 未找到或不可执行,跳过拉取依赖库步骤" fi fi # 处理 heap 文件 shopt -s nullglob heap_files=("${HEAP_DIR}"/ndm_locmap_*.heap) if [[ ${#heap_files[@]} -eq 0 ]]; then echo "未在 ${HEAP_DIR} 目录下找到 ndm_locmap_*.heap 文件" exit 1 fi # 获取CPU核心数(并发数),允许通过环境变量指定 CPU_CORES="${CPU_CORES:-$(nproc)}" echo "开始并发生成 PDF,每次最多并发 ${CPU_CORES} 个任务..." export PPROF EXEC OPTS PDF_DIR gen_pdf() { heapfile="$1" fname=$(basename "$heapfile") base="${fname%.heap}" # 去掉结尾的 .heap outpdf="${PDF_DIR}/${base}.heap.pdf" echo "生成 ${outpdf} ..." "${PPROF}" "${EXEC}" "$heapfile" ${OPTS} > "${outpdf}" if [[ $? -eq 0 ]]; then echo "✔ ${outpdf} 生成成功" else echo "✗ ${outpdf} 生成失败" fi } export -f gen_pdf # GNU parallel优先,否则用xargs(大多数Linux系统已自带) if command -v parallel &> /dev/null; then printf "%s\n" "${heap_files[@]}" | parallel -j "${CPU_CORES}" gen_pdf {} else printf "%s\n" "${heap_files[@]}" | xargs -n1 -P "${CPU_CORES}" -I{} bash -c 'gen_pdf "$@"' _ {} fi ENDTIME=$(date +%Y-%m-%d_%H:%M:%S) echo "全部并发生成完成!时间戳:${ENDTIME}"
(图片来源网络,侵删)
(图片来源网络,侵删)
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。