JAVA 005 问题定位和分析方法

目录

  问题

  问题定位

 

此文只大致介绍问题定位的粗略过程,关于系统内部的问题查找,例如线程堆转储文件,内存堆转储文件,GC日志的分析,以及Linux系统命令的使用及查看介绍,在其它文章中介绍

问题

内存泄漏(内存无法释放)

  程序中已动态分配的堆内存由于某种程序未释放或无法释放,造成内存的浪费,导致程序运行速度减慢甚至系统崩溃等验证结果(无法释放)(后果就是内存溢出)

内存溢出(内存不够)

  程序运行要用到的内存大于虚拟机能提供的最大内存

问题定位(指的是Linux环境下的问题查找)

问题定位数据:运行日志,异常堆栈,GC日志,线程快照,堆转储快照

步骤

  1 先排除其它程序过渡占用系统资源的情况

  2 排除"目标服务"(有问题的系统)本身占用系统过渡的情况

  3 观察"目标服务"(有问题的系统)内部的情况,排除掉各种故障类型

  4 应用服务器监控及代码分析

排除其它程序过渡占用系统资源(CPU,内存,磁盘,网络)

1 CPU检查

  运行【top】命令检查CPU(idel空闲)空闲较多,则排除其它进程占用CPU过量的情况,否则根据CPU占用率降序,查看高CPU占用率高的进程,确定为什么此进程会占用CPU高

2 内存检查

  运行【free】命令检查剩余物理内存(-/+buffer/cache行的free)情况,剩余物理内存较多,则排除占用物理内存过量的情况,否则通过【vmstat -n 1】检查【交换空间(操作系统中有讲解干嘛的)】(si/so换入换出)情况,多行(si/so)数值都为0,排除剩余物理内存不足,(si/so)数值较多,说明存在较明细的内存不足问题,通过【top】,将进程按照物理内存大小占用(RES)从大到小进程排序,查看内存占用率高的进程,确定为什么此进程占用内存高

3 IO检查

  运行【iostat】检查磁盘IO请求,磁盘读写量在预估之内,排除其它进程占用磁盘IO过多的情况,磁盘读写量明显超过推算,则找到大量读写磁盘的进程

4 网络IO

  运行【netstat -anop | grep tcp | wc -l】查看各种状态的TCP连接数量和,总数较少,则排除连接数占用过多的情况,(怎样统计每个进程的TCP连接数量)

关于如何找到大量读写磁盘的情况(【iotop】获取每个进程的IO情况)

  通过【ls -l /proc/*/fd | grep 该设备映射装载到的文件系统路径】 查看到哪个进程打开了该设备的文件,并根据进程身份,打开的文件名,文件大小等属性判断是否做了大量读写

  可以使用【pstack】取得进程的线程调用栈,或者【strace】跟踪磁盘读写API来帮助确认某个进程是否在做磁盘做大量读写

排除目标服务占用过滤系统情况

1 CPU检查

  运行【top】,按照CPU使用从高到低的排序查看进程,目标服务占用的CPU较低,或者符合经验预期,则排除目标服务CPU占用过高的问题(否则,观察线程级别的CPU)

  1.1 如果CPU分散到多个线程,而且每个线程占用都不算高,则排除CPU占用过高的问题

  1.2 如果CPU使用集中到一个线程或几个线程,而且很高,则用【jstack pid > jstack.log】获取目标服务中线程调用栈情况(top中看到的占用CPU较高的线程的PID转换成16进制(字母用小写),然后在jstack.log找到对应线程,检查其逻辑)

    1.2.1 假如对应线程是纯计算型任务(例如:GC,正则匹配,数值计算等)则排除CPU占用过高问题,如果线程数占用CPU总量过多,则需要限制线程数

    1.2.2 假如对应线程不是纯计算型任务(例如:只是数据请求)则该线程CPU占用过高,则可能发生了异常,例如:死循环,数据结构过大等

2 内存检查

  运行【top】按照物理内存使用从高到低排序进程,评估目标服务占的内存量是否在预期之内,如果在,则排除目标服务内存占用过高的问题

目标服务内部检查

  GC日志分析

  线程堆转储文件分析 【jstack -l PID】导出 可以使用IBM JCA查看

  内存堆转储文件分析 【jmap -heap:format=b pid 格式】 《=1.5版本 【jmap -dump:format=b,file=filename pid】 >1.6 可以使用MAT进行分析

应用服务器监控及代码分析

  1 入口 如http连接池之类,数据来源方向的相关配置,比如:连接数限制,超时时间,连接回收策略

  2 内部 处理请求的各项资源,比如:线程数,线程调度

  3 出口 向后端交互的各项资源,比如:数据库连接池的配置

       

猜你喜欢

转载自www.cnblogs.com/hpzhu/p/10113938.html
005