免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
搜索
本版
文章
帖子
ToB圈子
用户
登录
立即注册
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微头条
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
并发解析hea,转为pdf格式
返回列表
发新帖
并发解析hea,转为pdf格式
[复制链接]
发表于
4 天前
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
由于每次解析一个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}"
复制
代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
返回列表
浏览过的版块
DevOps与敏捷开发
区块链
愛在花開的季節
+ 我要发帖
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表