如何从jcmd命令输出中高效提取堆内存total与used值?
从jcmd GC.heap_info输出中提取堆内存total和used值的方法
需求说明
需要从jcmd <PID> GC.heap_info的输出里,快速提取堆内存的total(示例中33521664K)和used(示例中22917322K)数值。
高效提取方案
方案1:单awk命令(最简洁)
直接用awk定位目标行并提取字段,一步到位:
jcmd 27047 GC.heap_info | awk '/garbage-first heap/ {printf "total: %s\nused: %s\n", $4, $6}'
执行后输出示例:
total: 33521664K used: 22917322K
原理:awk匹配包含garbage-first heap的行,$4对应total后的数值,$6对应used后的数值,用printf格式化输出更清晰。
方案2:grep+awk组合(直观易读)
先过滤出目标行,再提取对应数值,适合新手理解:
# 同时获取total和used jcmd 27047 GC.heap_info | grep "garbage-first heap" | awk '{print "total:", $4, "used:", $6}' # 单独提取total jcmd 27047 GC.heap_info | grep "garbage-first heap" | awk '{print $4}' # 单独提取used jcmd 27047 GC.heap_info | grep "garbage-first heap" | awk '{print $6}'
方案3:sed正则提取
用sed的正则捕获功能直接匹配数值:
# 提取total值 jcmd 27047 GC.heap_info | sed -n 's/.*total \([0-9K]*\),.*/\1/p' # 提取used值 jcmd 27047 GC.heap_info | sed -n 's/.*used \([0-9K]*\).*/\1/p'
原理:正则\([0-9K]*\)捕获total或used后面的数字+K组合,\1输出捕获的内容,-n和p确保只输出匹配到的行。
内容的提问来源于stack exchange,提问作者rvk_user
相关产品推荐
相关产品推荐

