将建立互信的机器的jstat数据写入到指定位置--shell脚本

博客给出一段Bash脚本,通过ssh连接到指定主机,执行jstack -l命令并将结果追加到临时文件,随后将该临时文件复制到指定目录。

#!/bin/bash
ssh $1 jstack -l $2 >> “/tmp/run_jstat/jstack_”$1".txt";cp /tmp/run_jstat/jstack_$1.txt /opt/test/file/jstack_$1.txt

<think>我们正在讨论jstat命令的两个常用选项:-gc和-gcutil。用户希望了解这两个命令输出参数的具体含义。根据引用[1]和引用[4],我们可以找到一些基础信息:-jstat-gc:监控GC的相关统计信息(如各代内存使用情况)。-jstat-gcutil:监控GC使用情况百分比(如Eden、Old、Meta的使用率)。但是,用户需要的是这两个命令输出的每个参数的具体含义。首先,我们需要明确两个命令的输出列分别代表什么。一、jstat-gc的输出列(根据引用[3]和引用[4]以及标准文档):它输出的是各个内存区域的实际容量(单位KB),以及GC发生的次数和时间。通常,jstat-gc的输出包含以下列(注意:不同的JVM版本可能略有不同,但核心列是相似的):S0C:当前Survivor0区容量(kB)S1C:当前Survivor1区容量(kB)S0U:Survivor0区已使用(kB)S1U:Survivor1区已使用(kB)EC:当前Eden区容量(kB)EU:Eden区已使用(kB)OC:当前Old区容量(kB)OU:Old区已使用(kB)MC:Metaspace(元空间)容量(kB)MU:Metaspace已使用(kB)CCSC:压缩类空间容量(kB)CCSU:压缩类空间已使用(kB)YGC:年轻代GC次数YGCT:年轻代GC总耗时(秒)FGC:FullGC次数FGCT:FullGC总耗时(秒)CGC:并发GC次数(有些版本可能没有)CGCT:并发GC总耗时(秒)GCT:所有GC总耗时(YGCT+FGCT+CGCT)二、jstat-gcutil的输出列:它输出的是各个内存区域的使用率百分比。通常包含以下列:S0:Survivor0区使用率(百分比)S1:Survivor1区使用率(百分比)E:Eden区使用率(百分比)O:Old区使用率(百分比)M:Metaspace使用率(百分比)CCS:压缩类空间使用率(百分比)YGC:年轻代GC次数YGCT:年轻代GC总耗时(秒)FGC:FullGC次数FGCT:FullGC总耗时(秒)CGC:并发GC次数(有些版本可能没有)CGCT:并发GC总耗时(秒)GCT:所有GC总耗时(秒)注意:在gcutil中,每个内存区域的使用率计算公式为:(已使用容量/当前容量)*100%另外,引用[2]提到,在故障分析中,gcutil是一个常用的工具,可以快速查看各个区域的使用率,从而判断内存使用是否健康。下面我们用一个具体的例子来说明(假设输出一行,数字为示例):jstat-gcutil1234510001输出:S0S1EOMCCSYGCYGCTFGCFGCTCGCCGCTGCT0.0025.0080.0065.0097.5090.001002.50050.80030.2003.500解释:S0:0.00%表示Survivor0区没有使用S1:25.00%表示Survivor1区使用了25%E:80.00%表示Eden区使用了80%O:65.00%表示老年代使用了65%M:97.50%表示元空间使用了97.5%,需要关注是否可能溢出CCS:90.00%表示压缩类空间使用了90%YGC:100次年轻代GCYGCT:年轻代GC总耗时2.5秒FGC:5次FullGCFGCT:FullGC总耗时0.8秒CGC:3次并发GC(如CMS的并发阶段)CGCT:并发GC总耗时0.2秒GCT:总GC时间3.5秒而同样的进程,用jstat-gc可能输出(单位为KB):S0CS1CS0US1UECEUOCOUMCMUCCSCCCSUYGCYGCTFGCFGCTCGCCGCTGCT1024.01024.00.0256.08192.06553.610240.06656.04480.04368.0384.0345.61002.50050.80030.2003.500这里每个容量和使用量都是具体的数值(KB)。因此,总结:-jstat-gc提供的是绝对值(容量和使用量),单位是KB。-jstat-gcutil提供的是相对值(使用百分比)。在实际问题排查中,gcutil可以快速看出哪些区域使用率过高,而gc则可以具体看出内存分配的大小和实际使用量,两者结合可以更全面地分析内存使用情况。注意:不同的垃圾收集器(如G1)和不同的JDK版本,输出可能会有所不同。例如,在G1收集器中,可能没有S0C、S1C等,而是替换为G1相关的区域。以上内容参考了引用[1]、[2]、[3]、[4]。</think>### jstat -gc 和 jstat -gcutil 参数详解 #### 一、`jstat -gc` 输出参数(显示各内存区域实际容量) 输出单位为 KB,提供内存区域的**绝对数值**: ``` S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT ``` - **新生代相关** - `S0C`:Survivor0 区当前容量 - `S1C`:Survivor1 区当前容量 - `S0U`:Survivor0 区已使用量 - `S1U`:Survivor1 区已使用量 - `EC`:Eden 区当前容量 - `EU`:Eden 区已使用量 - **老年代相关** - `OC`:Old 区当前容量 - `OU`:Old 区已使用量 - **元空间相关** - `MC`:Metaspace 容量 - `MU`:Metaspace 已使用量 - `CCSC`:压缩类空间容量 - `CCSU`:压缩类空间已使用量 - **GC 统计** - `YGC`:Young GC 发生次数 - `YGCT`:Young GC 总耗时(秒) - `FGC`:Full GC 发生次数 - `FGCT`:Full GC 总耗时(秒) - `CGC`:并发 GC 次数(如 CMS/G1) - `CGCT`:并发 GC 总耗时(秒) - `GCT`:所有 GC 总耗时(YGCT + FGCT + CGCT)[^1][^3] #### 二、`jstat -gcutil` 输出参数(显示使用百分比) 输出为**百分比**,聚焦内存使用率: ``` S0 S1 E O M CCS YGC YGCT FGC FGCT CGC CGCT GCT ``` - **内存使用率** - `S0`:Survivor0 区使用率 - `S1`:Survivor1 区使用率 - `E`:Eden 区使用率 - `O`:Old 区使用率 - `M`:Metaspace 使用率 - `CCS`:压缩类空间使用率 - **GC 统计**(与 `-gc` 相同) - `YGC`/`YGCT`:Young GC 次数与耗时 - `FGC`/`FGCT`:Full GC 次数与耗时 - `GCT`:GC 总耗时[^2][^4] #### 三、核心区别 | **特性** | `jstat -gc` | `jstat -gcutil` | |----------------|----------------------------|-------------------------| | **数据维度** | 绝对容量(KB) | 使用率百分比(%) | | **适用场景** | 分析内存分配大小 | 快速识别内存瓶颈区域 | | **关键指标** | `EU`(Eden 使用量) | `O`(Old 区使用率) | | **故障排查** | 结合容量判断是否需扩容 | 识别 >95% 的溢出风险区 | #### 四、使用示例 1. **监控内存趋势** ```bash jstat -gcutil <pid> 1000 5 # 每秒采样1次,共5次 ``` 输出示例: ``` S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 25.00 80.00 65.00 97.50 90.00 100 2.500 5 0.800 3.500 ``` **解读**: - 元空间(`M=97.5%`)接近溢出,需检查类加载 - 老年代(`O=65%`)使用正常 - 发生 5 次 Full GC(`FGC=5`)[^2][^4] 2. **分析内存分配** ```bash jstat -gc <pid> ``` 输出示例: ``` EC EU OC OU MC 8192.0 6553.6 10240.0 6656.0 4480.0 ``` **解读**: - Eden 总容量 8MB(`EC=8192KB`),已用 6.4MB(`EU=6553.6KB`) - Old 区总容量 10MB(`OC=10240KB`)[^3][^5] ### 关键应用场景 - **`-gcutil`**:快速定位内存瓶颈(如 Old 区持续 >90% 可能需优化对象生命周期)[^2] - **`-gc`**:调整 JVM 参数前验证各代容量(如 `OC` 是否过小导致频繁 Full GC)[^5]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值