码迷,mamicode.com
首页 > 其他好文 > 详细

线上维护

时间:2014-05-19 09:59:30      阅读:420      评论:0      收藏:0      [点我收藏+]

标签:code   c   java   tar   int   a   

【线上维护的资料】中供JVM Crash
命令列表
top -H -b -n 1 -p $pid
echo "ibase=10;obase=16;$pid" | bc
grep xx jstack.log
 
ps auxf | grep $gid
netstat -nal | grep 1521
lsof -i:1521
 
jps
jstat -gcutil $pid 1000
jstack $pid > xx.log
jmap -heap $pid
jmap -dump:format=b,file=heap.bin $pid
 
1. 故障反馈机制(单独去讲,最近的故障分析,需要有人定期Review团队故障例子)
2. Dump脚本(康康已经发布)
3. 分析环境(胖胖搞好了)
4. 典型Case
4.1 JVM Crash
排查步骤
Crash日志位置:
zeus:/home/admin/output/java_error8921.log;
Martini:/home/admin/output/logs/jetty/jetty_stdout.log
jstack
案例说明
Martini P2故障
老中供JVM Bug,热点编译+GC Bug。java version 1.6.0_11, 1.6.0_18
4.2 OOM 异常
dump.sh(jstack, bin)
Martini图片、消息盒子Load大数据
4.3 CPU Load飙升
sudo -u admin top -H -b -n 1 -p $pid
 
4.4 连接池爆满
netstat -nal | grep 1521
lsof -i:xxxx
 
公共部分:
echo "ibase=10;obase=16;$pid" | bc
jstack pid > jstack.log
grep 16进制的pid -i jstack.log
 
4.5 文件修订
jar tvf web.war | grep esb-client-provider.xml
jar xvf web.war WEB-INF/esb/esb-client-provider.xml
vim WEB-INF/esb/esb-client-provider.xml
jar uvf web.war WEB-INF/esb/esb-client-provider.xml
 
不给出固定脚本的意图在于,大家确认自己知道在做哪些事情。
 
编写一个观察线上应用启动过程的脚本
[huiling.fenghl@cm3a14-crm-martini-admin-xen admin]$ cd tmp
[huiling.fenghl@cm3a14-crm-martini-admin-xen tmp]$ mkdir -p /home/huiling.fenghl/start_log_02
[huiling.fenghl@cm3a14-crm-martini-admin-xen tmp]$ sh startUp.sh /home/huiling.fenghl/start_log_01
 
1. 观察线程存活时间,并排序
cat top.* | awk ‘{print $11}‘ | sort -n -r | uniq | head
2:33.08
 
2. 观察线程出现次数
cat top.* | awk ‘{print $1}‘ | sort | uniq -c | sort -n -r| head -n50
 
3. 观察线程对应名称
cat top.* | awk ‘{print $1}‘ | sort | uniq -c | sort -n -r| head -n200  取线程出现次数,按最大排序
|awk ‘{print $2}‘ | xargs --replace echo "ibase=10;obase=16;{}" | bc 按线程id换算16进制线程标识
| xargs --replace grep "0x{}" -i all.jstack -m1 取得线程标识对应的线程名称
4. 根据上述结果,汇集一个视图
1). pid count 出现次数
2). pid Time 存活时间
3). pid 0x16进制标识-- > thread name
4). merge 结果
 
5. startUp.sh内容
[huiling.fenghl@cm3a14-crm-martini-admin-xen tmp]$ cat startUp.sh
#!/bin/bash
pid=`sudo -u admin jps | awk ‘{if($2=="start.jar" || ($2=="Main")){print $1}}‘`
log_path=$1
min=0
while(($min<60))
do
        echo "$pid: $min"
        name=`date +%Y-%m-%d-%H-%M-%S`
        sudo -u admin jstack -l $pid > $log_path/jstack.$name.log
        sudo -u admin top -H -b -n 1 -p $pid > $log_path/top.$name.log
        sleep 5
        min=$(($min+1))
done
echo "$pid"

线上维护,布布扣,bubuko.com

线上维护

标签:code   c   java   tar   int   a   

原文地址:http://www.cnblogs.com/xuelu/p/3731949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!