API单位误解造成的严重故障

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. API单位误解造成的 严重故障 林昊 2014.4
2. Agenda n  故障案例分享 n  Java问题排查工具箱
3. 故障现象 n  访问就进入如下限流页面 n  重启应用后恢复
4. 排查过程回顾 n  出现限流页面的原因 l  应用中活跃的线程数超过了阈值 n  最重要的是要知道这些线程都在干什么 l  不幸的是当时没做线程dump l  幸运的是有⼀一台做了heap dump
5. 排查过程回顾 n  分析活跃的线程在做什么 l  MAT分析heap dump,查看线程状况
6. 排查过程回顾 n  所有活跃的http线程都在等⼀一把锁 l  到底哪个线程持有了这把锁呢 n  MAT分析没有直接的线程dump文件 n  借助google查了下可能是什么原因 l  google提示有可能是因为idle timeout thread
7. 排查过程回顾 n  持有锁的Idle Timeout Thread
8. 排查过程回顾 n  Idle timeout thread为什么会卡住呢 l  socketClose竟然⼀一直没关掉 n  查看了下内存去关连接的server l  经确认在那个时间段内对应的server集群有几台在维修; n  但为什么会导致socketClose⼀一直没关掉呢 l  代码里有调用setLinger(1000) Ø  这个会影响到关闭的速度,开发告诉我这是1s Ø  那理论上也不会卡住,于是有点怀疑...
9. 排查过程回顾 n  查了下setLinger的说明 l  结果这个的单位是s n  于是意味着socketClose那个地方会卡住1000s l  ok,到此问题确认。
10. 故障案例总结 n  API单位误解造成了严重故障; l  对于代码中使用到的API要清楚的知道其行为。 n  其他 l  未根据故障现象做相应的现场保留动作; n  导致排查比较折腾。 l  Google是排查故障的得力帮手。
11. 故障案例总结 n  API单位误解造成的经典故障 l  火星气候探测者号任务失败的主要原因是人为因素,因为火星气候探测者号上的飞 行系统软件使用公制单位牛顿计算推进器动力,而地面人员输入的方向校正量和推 进器参数则使用英制单位磅力,导致探测器进入大气层的高度有误,最终瓦解碎裂。 n  造成的损失估计过亿美金
12. Java问题排查工具箱 n  默认值相关问题 l  -XX:+PrintFlagsFinal || jinfo -flags n  类装载相关问题 l  -XX:+TraceClassLoading n  应用无响应相关问题 l  sar等系统指标 l  jstack [-l] [-m]
13. Java问题排查工具箱 n  内存相关问题 l  -XX:+HeapDumpOnOutOfMemoryError –XX:+PrintGCDetails –XX: +PrintGCDateStamps –Xloggc:<gc log文件> l  jmap n  -histo:live [pid] n  –dump:file=<文件名>,format=b [pid] l  gcore [pid] l  MAT l  btrace l  gperftools l  ulimit n  cat /proc/[pid]/limits
14. Java问题排查工具箱 n  CPU利用率相关问题 l  top –H+jstack l  perf –top n  阿里版本的perf & JDK l  jstack+btrace l  blktrace+debugfs+btrace
15. Java问题排查工具箱 n  Java进程退出相关问题 l  core dump n  gdb l  dmesg | grep –i kill l  hs_err_pid[pid].log l  JDK bugs
16. 谢谢大家! n  更多故障排查的cases以及技巧请关注

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.138.0. UTC+08:00, 2024-12-22 01:51
浙ICP备14020137号-1 $Map of visitor$