最近小弟要分析一些gc数据,同时要分析几台机器的gc日志,主要统计每天数据:minor gc次数,最大运行时间,最小运行时间,平均运行时间,minor gc引起的总的stop world时间,major gc次数,major gc引起的总的stop world时间。
原始数据:
2012-10-25T13:00:22.244+0800:234273.762: [GC 234273.762: [ParNew: 1418872K->53180K(1501888K), 0.0337000secs] 3512438K->2148338K(4057792K), 0.0340400 secs] [Times: user=0.14sys=0.00, real=0.03 secs]
2012-10-25T13:00:37.762+0800:234289.280: [GC 234289.280: [ParNew: 1418556K->44716K(1501888K), 0.0383930secs] 3513714K->2143690K(4057792K), 0.0387180 secs] [Times: user=0.17 sys=0.00,real=0.04 secs]
2012-10-25T13:00:37.804+0800:234289.322: [GC [1 CMS-initial-mark: 2098974K(2555904K)] 2154135K(4057792K),0.0379380 secs] [Times: user=0.04 sys=0.00, real=0.04 secs]
2012-10-25T13:00:37.843+0800:234289.360: [CMS-concurrent-mark-start]
2012-10-25T13:00:38.410+0800:234289.928: [CMS-concurrent-mark: 0.568/0.568 secs] [Times: user=1.39 sys=0.10,real=0.57 secs]
2012-10-25T13:00:38.410+0800:234289.928: [CMS-concurrent-preclean-start]
2012-10-25T13:00:38.431+0800:234289.949: [CMS-concurrent-preclean: 0.018/0.021 secs] [Times: user=0.02sys=0.00, real=0.02 secs]
2012-10-25T13:00:38.431+0800:234289.949: [CMS-concurrent-abortable-preclean-start]
CMS: abort precleandue to time 2012-10-25T13:00:43.774+0800: 234295.292:[CMS-concurrent-abortable-preclean: 5.312/5.343 secs] [Times: user=7.37sys=0.54, real=5.34 secs]
2012-10-25T13:00:43.776+0800:234295.294: [GC[YG occupancy: 579432 K (1501888 K)]234295.294: [Rescan(parallel) , 0.1664420 secs]234295.460: [weak refs processing, 0.0121300secs]234295.473: [class unloading, 0.0363220 secs]234295.509: [scrub symbol& string tables, 0.0235950 secs] [1 CMS-remark: 2098974K(2555904K)]2678406K(4057792K), 0.2485670 secs] [Times: user=0.78 sys=0.00, real=0.24 secs]
……………………
2012-10-25T13:00:53.494+0800:234305.012: [GC 234305.012: [ParNew: 1410092K->50641K(1501888K), 0.0385890secs] 1704007K->349502K(4057792K), 0.0389030 secs] [Times: user=0.14sys=0.00, real=0.04 secs]
考虑使用expect这个脚本工具自动分析gc数据,同时bash端使用多子进程模式Map加快速度。神器地址http://expect.sourceforge.net/
应用MapReduce模型,这里的Map就是采集子进程(负责单台机器的数据采集),代码:
#map task parallelexecuting ,statistics one host,using 'expect'
map(){
local TMP_FILE=$RESULT_FILE"_"$HOST"_"$1
local TMP_MAP_RESULT_FILE=$TMP_FILE"_mapresult"
echo "$TMP_MAP_RESULT_FILE"
{
#使用expect脚本自动分析数据,call脚本见后面分析
/usr/bin/expect -f ./call $USER $HOST $DATE > $TMP_FILE
echo $HOST"_"$DATE > $TMP_MAP_RESULT_FILE
grep -v "grep" $TMP_FILE| grep "Total=" >>$TMP_MAP_RESULT_FILE
grep -v "grep" $TMP_FILE| grep "Average=" >>$TMP_MAP_RESULT_FILE
grep -v "grep" $TMP_FILE| grep "Min=" >>$TMP_MAP_RESULT_FILE
grep -v "grep" $TMP_FILE| grep "Max=" >>$TMP_MAP_RESULT_FILE
grep -v "grep" $TMP_FILE| grep "MajorCount=" >>$TMP_MAP_RESULT_FILE
grep -v "grep" $TMP_FILE| grep "TotalInitMark=" >>$TMP_MAP_RESULT_FILE
grep -v "grep" $TMP_FILE| grep "TotalRemark=" >>$TMP_MAP_RESULT_FILE
}&
#子进程模拟Map任务
}
Reduce就是将上述子进程的采集数据做一个merge,因为最后只需要一个文件,所以reduce只有1个,主进程完成即可
#reduce task,justmerge map result file
reduce(){
#取Map过程产生的临时文件
for FILE in ${MAP_RESULT[@]}
do
echo "--------------------------"
#直接标准输出,也可输出到文件
cat $FILE
echo "--------------------------"
done
}
主进程控制流程,代码:
echo "start statjob"
………………
#Array store mapresult files' name
declare -a MAP_RESULT
echo "mapstart"
for HOST in${SERVER_ARRAY[@]}
do
MAP_RESULT[$COUNT]=`map $COUNT`
((COUNT=$COUNT+1))
done
#wait to map task end
#主进程在此等待Map任务全部完成
wait
echo "mapend"
echo "reducestart"
reduce
echo "reduceend"
echo "startclear"
clear
echo "endclear"
核心call脚本使用expect脚本,自动登录到目标主机上采集数据,将结果输出到本地文件,代码:
#!/usr/bin/expect
set USER [lindex$argv 0]
set HOST [lindex$argv 1]
set DATE [lindex$argv 2]
set LOG_PATH"/home/admin/logs/gc.log"
set timeout 30
spawn/usr/bin/ssh $USER@$HOST
expect ".*id_dsa':"
send "\r"
expect"password:"
#xxxxxxx是跳板机密码
send"xxxxxxxx\r"
sleep 1
send "grep'$DATE' $LOG_PATH /gc.log|grep 'ParNew' |awk '{print \$15}'|awk -F'=' '{print\$2}'|awk 'BEGIN{total=0}{total+=\$1}END{print\"Total=\"total}'\r"
sleep 1
send "grep'$DATE' $LOG_PATH /gc.log|grep 'ParNew' |awk '{print \$10}'|awk'{sum+=\$1} END {print \"Average=\"sum/NR}'\r"
sleep 1
send "grep'$DATE' $LOG_PATH /gc.log|grep 'ParNew' |awk '{print \$10}'|awk 'BEGIN {min =1999999} {if (\$1<min) min=\$1 fi} END {print\"Min=\"min}'\r"
sleep 1
send "grep'$DATE' $LOG_PATH /gc.log|grep 'ParNew' |awk '{print \$10}'|awk 'BEGIN{max = 0} {if (\$1>max) max=\$1 fi} END {print\"Max=\"max}'\r"
sleep 1
send "echo\"MajorCount=\"`grep '$DATE' $LOG_PATH |grep 'CMS-remark'|wc -l`\r"
sleep 1
send "grep'$DATE' $LOG_PATH |grep 'CMS-init' |awk -F'real=' '{print \$2}'|awk '{print\$1}'|awk 'BEGIN{total=0}{total+=\$1}END{print\"TotalInitMark=\"total}'\r"
sleep 1
send "grep'$DATE' $LOG_PATH |grep 'CMS-remark'|awk -F'real=' '{print \$2}'|awk'{print \$1}'|awk 'BEGIN{total=0}{total+=\$1}END{print\"TotalRemark=\"total}'\r"
send"exit\r"
expect eof
代码很简单,模拟登录,然后grep+awk分析gc.log,然后退出目标主机
在跳板机上执行:
. /statgcParallel.sh-u xiaodong.langxd -s slave1:slave2 -d 2012-11-07
输出:
start stat job
map start
map end
reduce start
--------------------------
slave1_2012-11-07
Total=30.57
Average=0.0340765
Min=0.0104980
Max=0.1478140
MajorCount=1
TotalInitMark=0.05
TotalRemark=0.25
--------------------------
--------------------------
slave2_2012-11-07
Total=165.37
Average=0.0268371
Min=0.0160940
Max=0.0812770
MajorCount=4
TotalInitMark=0.09
TotalRemark=1.08
--------------------------
reduce end
start clear
end clear
搏君一笑~~~
分享到:
相关推荐
但于此同时,在进行交易信息分析时,部分需要根据原始数据计算才能得到的指标无法直接获取,而且日志信息比较杂乱,不便汇总分析,因此需要使用bash脚本对日志进行交易情况分析。 内容包括(bash脚本及注释,日志...
总之,在Linux Bash Shell脚本中使用`sudo`命令时,可以通过`expect`工具或修改`sudoers`文件来自动化密码输入。然而,这种方式应当谨慎使用,因为可能会降低系统的安全性。在实际应用中,应根据具体需求和安全策略...
### 使用Expect实现自动切换用户及执行命令 #### 一、Expect简介 `Expect`是一种用于自动化交互式命令的工具,它能模拟用户与基于文本的交互式程序进行对话。通过编写脚本来控制这些对话,我们可以实现一系列自动...
另外,`lj`编写的`expert脚本.sh`是一个实际的示例,通过阅读和分析这个脚本,可以更直观地理解`expect`的工作原理和应用。 总之,`expect`是Linux自动化中的重要工具,它使脚本能够与用户界面进行交互,极大地扩展...
总结来说,GChisto是一款强大的GC日志分析工具,它通过解析和可视化JVM的GC日志,帮助开发者和运维人员找出内存管理的问题,特别是Old Generation区域的问题,从而提升Java应用的性能和稳定性。正确使用GChisto,并...
通过使用 Expect,可以将原本需要手动进行的操作,例如 SSH 登录、FTP 登录等,编写成脚本自动执行。这在需要对多台服务器执行相同操作的场景下尤其有用,能够显著提高系统管理员的工作效率。 ### 2. 安装 Expect ...
在Linux自动化运维中,`expect`脚本是一个强大的工具,它可以自动交互地处理命令行程序,尤其是涉及到需要用户输入的情况,如SSH登录、输入密码等。`expect`结合`bash`环境,可以实现多会话管理,使得在多个远程主机...
1. **系统维护**:如磁盘清理、日志分析、系统监控等。 2. **文件操作**:如文件备份、文件查找、批量重命名等。 3. **网络管理**:如DNS查询、网络速度测试、端口扫描等。 4. **进程控制**:启动、停止、监控进程或...
### 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 #### Hadoop 2.x 版本变化及依赖分析 在Hadoop 2.x版本中,相较于早期版本,其架构和依赖库有了明显的变化。在早期版本如1.x中,所有的依赖都集中在`...
Bash 使用文档 bash 是一种广泛使用的 shellcript 语言,主要应用于 Linux 操作系统中。下面是 bash 的一些重要知识点: 一、什么是 shell shell 是 Linux 系统中,用户和内核之间的交互程序。它翻译用户输入的...
使用像EditPlus这样的编辑器,结合定制的Bash语法高亮和自动补全功能,可以极大地提升Bash脚本开发的生产力。 安装和使用这些配置文件非常简单。只需将`bash.acp`和`bash.stx`文件复制到EditPlus的安装目录下的...
### bash-door后门分析 #### 一、简介 在网络安全领域,后门是一种常见的攻击手段,它能够让攻击者绕过正常的认证过程,从而获得对系统的非法访问权限。bash-door正是一种设计精巧、隐蔽性高的后门工具,通过修改...
Bash(Bourne Again Shell),几乎所有的 Linux 和绝大部分的 UNIX 都可以使用 Bash。作为系 统与用户之间的交互接口,shell 几乎是你在 UNIX 工作平台上最亲密的朋友,因此,学好 shell,是学习 Linux/UNIX 的的开始,并且...
使用Hadoop的命令行工具提交作业,并通过日志和输出数据进行调试。 总之,在Windows下编写MapReduce程序需要对Hadoop的架构和MapReduce模型有深入理解,同时利用UnxUtils等工具来适应Unix-like环境。通过实践和不断...
为了自动化这些过程,`expect`工具应运而生。`expect`是一个基于TCL(Tool Command Language)的脚本语言,主要用于自动化那些需要用户交互的任务,它能够模拟用户对命令行的输入,极大地提高了工作效率。 `expect`...
在大数据处理领域,Java 通常是首选语言,但考虑到Python在数据挖掘和深度学习中的便利性,我们可以使用Python来实现MapReduce。本篇文章将探讨如何在Hadoop平台上利用Python实现WordCount,一个经典的MapReduce示例...
在IT行业中,`expect`是一个强大的自动化脚本工具,它允许程序员或系统管理员与命令行交互,特别是自动处理需要用户输入的情况。`expect`的名字来源于它"期望"特定的输出,然后根据这些输出做出响应。在标题和描述中...
expect_test_bash