并发解析hea,转为pdf格式

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
由于每次解析一个heap须要时间有点久,就写了一个主动解析程pdf的一个脚本。
down_lib.sh是须要自己写的哦,重要是用于下载自己所需步伐的库,用于解析heap。
  1. #!/bin/bash
  2. # 优化版通用解析脚本(并发加速):批量生成 heap profile 的 PDF 报告
  3. # down_lib.sh, heapjx.sh 放到同一目录下。
  4. # 用法示例: ./heapjx.sh /app/heap
  5. START_TIME=$(date +%Y-%m-%d_%H:%M:%S)
  6. echo "开始生成 heap profile PDF 报告... 时间戳:${START_TIME}"
  7. set -euo pipefail
  8. # 自动查找 pprof_x86 路径
  9. PPROF="$(find ~/ -name pprof_x86 2>/dev/null | head -n1)"
  10. if [[ -z "${PPROF}" ]]; then
  11.     echo "未找到 pprof_x86 工具,请检查环境!"
  12.     exit 1
  13. fi
  14. EXEC="${EXEC:-./ndm_locmap_lib/ndm_locmap}"
  15. HEAP_DIR="${HEAP_DIR:-./heap}"
  16. PDF_DIR="${PDF_DIR:-./pdf}"
  17. NDM_LOCMAP_DIR="${NDM_LOCMAP_DIR:-./ndm_locmap_lib}"
  18. LIB_PREFIX="${LIB_PREFIX:-./ndm_locmap_lib}"
  19. OPTS="--pdf --show_bytes --lib_prefix=${LIB_PREFIX}"
  20. USERNAME="${USERNAME:-root}"
  21. HOST="${HOST:-192.168.2.62}"
  22. YCHEAP_DIR="${YCHEAP_DIR:-/app/heap/heap/}"
  23. # 自动创建必要目录
  24. mkdir -p "${PDF_DIR}" "${NDM_LOCMAP_DIR}"
  25. # 拉取heap文件目录
  26. # 如果当前目录下没有 heap 目录,才拉取
  27. echo "62板子上的heap目录: $1"
  28. if [[ ! -d ./heap ]]; then
  29.     echo "未检测到 heap 目录,执行拉取..."
  30.     scp -r "${USERNAME}@${HOST}:$1" .
  31. else
  32.     echo "heap 目录已存在,跳过拉取"
  33. fi
  34. # 判断 ndm_locmap_lib 目录下是否有文件,无文件才拉库
  35. if find ./ndm_locmap_lib -maxdepth 1 -type f | grep -q .; then
  36.     echo "ndm_locmap_lib 目录下已有文件,跳过拉取依赖库步骤"
  37. else
  38.     if [[ -x ./down_lib.sh ]]; then
  39.         echo "拉取依赖库..."
  40.         bash ./down_lib.sh ndm_locmap root 192.168.2.62 ./ndm_locmap_lib || \
  41.         echo "警告: down_lib.sh 执行失败,跳过拉取依赖库步骤"
  42.     else
  43.         echo "警告: down_lib.sh 未找到或不可执行,跳过拉取依赖库步骤"
  44.     fi
  45. fi
  46. # 处理 heap 文件
  47. shopt -s nullglob
  48. heap_files=("${HEAP_DIR}"/ndm_locmap_*.heap)
  49. if [[ ${#heap_files[@]} -eq 0 ]]; then
  50.     echo "未在 ${HEAP_DIR} 目录下找到 ndm_locmap_*.heap 文件"
  51.     exit 1
  52. fi
  53. # 获取CPU核心数(并发数),允许通过环境变量指定
  54. CPU_CORES="${CPU_CORES:-$(nproc)}"
  55. echo "开始并发生成 PDF,每次最多并发 ${CPU_CORES} 个任务..."
  56. export PPROF EXEC OPTS PDF_DIR
  57. gen_pdf() {
  58.     heapfile="$1"
  59.     fname=$(basename "$heapfile")
  60.     base="${fname%.heap}" # 去掉结尾的 .heap
  61.     outpdf="${PDF_DIR}/${base}.heap.pdf"
  62.     echo "生成 ${outpdf} ..."
  63.     "${PPROF}" "${EXEC}" "$heapfile" ${OPTS} > "${outpdf}"
  64.     if [[ $? -eq 0 ]]; then
  65.         echo "✔ ${outpdf} 生成成功"
  66.     else
  67.         echo "✗ ${outpdf} 生成失败"
  68.     fi
  69. }
  70. export -f gen_pdf
  71. # GNU parallel优先,否则用xargs(大多数Linux系统已自带)
  72. if command -v parallel &> /dev/null; then
  73.     printf "%s\n" "${heap_files[@]}" | parallel -j "${CPU_CORES}" gen_pdf {}
  74. else
  75.     printf "%s\n" "${heap_files[@]}" | xargs -n1 -P "${CPU_CORES}" -I{} bash -c 'gen_pdf "$@"' _ {}
  76. fi
  77. ENDTIME=$(date +%Y-%m-%d_%H:%M:%S)
  78. echo "全部并发生成完成!时间戳:${ENDTIME}"
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 07:48 , Processed in 0.074786 second(s), 29 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表