线上异常排查总结
来源:互联网 发布:visio 2013 mac破解版 编辑:程序博客网 时间:2024/05/20 22:01
一般来说,一个已经投入运营的大型项目出现问题的可能最多如下几种情况:
异常的CPU使用率
- 业务相关
业务高峰或上下游业务方异常的高QPS
定时任务大量的任务并发
消息、请求堆积后恢复时的瞬时流量引起
持久化任务引起 - 未经优化的代码
HASH冲突大量的KEY的hashcode相同,导致单链表过长
锁竞争,代码上下文复杂度低,导致大量线程停留在上锁代码处竞争锁
集合频繁扩容,用map或collection通信时,多次扩容容器 - GC增高
空间分配不合理或代码不合理导致的频繁gc
代码不合理或虚拟机配置不合理导致的大量对象直接创建在老年代中(PretenureSizeThreshold)
java1.6中,大量使用代理引起的perm空间不足 - load增高
线程使用不当导致产生大量线程,大量线程处于WAITING或TIMED_WAITING竞争资源,从而load增高
容器使用不当导致的线程不安全,引起循环链表等,线程陷入死循环,频繁竞争CPU资源 - st增高
超卖或宿主机的问题或宿主机下的其他虚拟机竞争了资源
- 对于CPU异常的排查:
- 第一步:就是找出业务关联,由业务引起的异常可以将复的同步任务改造为异步任务,限流,扩容等方式优化
- 第二步:定位异常线程,使用top -Hp来确定线程号(此处十进制),再使用kill -3 或 jstat 确认线程(此处十六进制,注意转换),根据线程数量、线程名称、线程状态、上下文确定问题点
- 第三步 : 定位异常的GC,使用jmap -heap、jstat -gcpermcapation 等命令确认问题,频繁的fullgc或长时间的fullgc都是异常的问题点
- 第四步:定位代码异常,可用jmap导出堆栈判断数据结构排查容器使用情况。
异常的内存使用
- 业务或配置导致
业务模型的设计不合理,大量的长生命周期的对象
虚拟机配置不合理引起的空间不足
阻塞io的使用又未使用超时 - 内存泄露
逻辑混乱、bug等问题导致的大量对象
性能不足引起的等待处理队列持续增长 - 静态空间异常
类加载器使用不当导致的大量的classloader和随之加载的class
- 堆外内存的分配不均
使用了nio但是了解不深导致的产生堆外内存
不正确的对unsafe使用或者开源项目中的bug产生的堆外内存脱离管理
- 对于内存异常的排查:
- 第一步:检查内存状态,使用jmap -heap 等命令查看内存使用,调优参数
- 第二部:检查实例统计,使用jmap命令查看活跃实例
- 第三步:dump出内存,直接分析
异常的IO使用
待整理….
其他异常情况
- 日志无输出
一般日志包冲突引起,可根据我的另一篇博客定位问题
- 类冲突
使用IDE定位class存在的jar包,使用maventree排查不兼容的版本依赖,如果两个以来使用了不兼容的版本,可以根据需要自己打包特殊版本
- timeout
数据库的timeout或spring的事物机制,根据情况解决
待整理
阅读全文
0 0
- 线上异常排查总结
- Java线上排查总结
- Java线上排查总结
- Java线上排查总结
- 线上问题排查命令总结
- 线上问题排查命令总结
- 一则线上MySql连接异常的排查过程
- 一则线上MySql连接异常的排查过程
- 线上应用故障排查
- 排查线上问题
- 线上问题排查
- 排查线上死循环
- 一次线上fullgc排查
- JVM线上问题排查
- 线上应用问题排查
- 线上问题排查
- 线上应用SQL执行次数异常飙高100倍的排查过程
- 线上操作与线上问题排查实战
- [maven(1)]myeclipse2014下如何配置maven
- Android Studio小白笔记(二)
- JS原生实现瀑布流
- stm32 堆和栈(stm32 Heap & Stack)
- Android系统启动的过程
- 线上异常排查总结
- 上至下 左至右递增数组寻找一数字
- linux配置mysql字符编码
- Maven学习笔记(三)------坐标和仓库
- Lua 包
- java基础知识总结,大牛分享
- linux安装
- 1030. Travel Plan (30)
- Django错误(1146,Table 'operation.django_session' doesn't exist")