• 2

  • 2

  • 收藏

JAVA线上问题排查

1星期前

线上故障排查,主要包括CPU,磁盘,内存以及网络,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap

1.jstack

jstack一般用于查找业务逻辑死循环,频繁gc,上下文切换过多等问题

(一)CPU占用过高

  • 1.通过top命令查看查看各个进程的使用情况,默认按照CPU的使用率排序

  • 2.使用top -H -p 2634找到该进程下占用CPU最高的线程

  • 3.使用printf '%x\n' pid将CPU使用率最高的线程号转化为16进制

  • 4.使用jstack排查问题

接着直接在 jstack 中找到相应的堆栈信息jstack pid |grep 'nid' -C5 –color,或者将该进程的thread dump文件保存

  • 5.分析dump文件

jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈

在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别,在nid=0x246c的线程调用栈中,发现该线程一直在执行JstackCase类第33行的calculate方法,得到这个信息,就可以检查对应的代码是否有问题。

thread dump分析线程的状态

在dump中,线程一般存在如下几种状态:

1、RUNNABLE,线程处于执行中

2、BLOCKED,线程被阻塞

3、WAITING,线程正在等待

一般情况下,我们会比较关注 WAITING 和 TIMED_WAITING 的部分,BLOCKED状态是一定有问题的,如果WAITING 和 TIMED_WAITING状态较多,也不正常

  • 查看状态cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c

(二)频繁gc

未完待续

2.网络请求延迟问题排查

网络请求问题的排查,可以分为三大块进行处理

1、service端接口服务的系统延时。通过在service短统计请求的响应时间,判断请求超时的问题

2、网络请求传递过程导致网络延迟以及丢包。

3、client调用方多线程代码执行延迟。

2.1service端接口服务的系统延时

可能是cpu负载过高,处理速度变慢引起,可以采用CPU利用率过高等排查方法

2.2 网络请求传递过程导致网络延迟以及丢包

  • 通过ping命令查看网络的延时,查看是否与运营商有关
  • 如果利用nginx做负载均衡,可以配置nginx的日志格式,通过日志检查是否是nginx的问题
log_format main
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"
"$upstream_response_time request_time $request_time"';
复制代码

新增了upstream_response_time 和 request_time upstream_response_time:从 Nginx 建立连接 到 接收完数据并关闭连接  request_time:从 接受用户请求的第一个字节 到 发送完响应数据

如果把整个过程补充起来的话 应该是: 

[1用户请求][2建立 Nginx 连接][3发送响应][4接收响应][5关闭 Nginx 连接] 

那么 upstream_response_time 就是 2+3+4+5 

但是 一般这里面可以认为 [5关闭 Nginx 连接] 的耗时接近 0 

所以 upstream_response_time 实际上就是 2+3+4 而 request_time 是 1+2+3+4 

二者之间相差的就是 [1用户请求] 的时间,如果用户端网络状况较差 或者传递数据本身较大 

再考虑到 当使用 POST 方式传参时 Nginx 会先把 request body 缓存起来 

而这些耗时都会累积到 [1用户请求] 头上去 

这样就解释了为什么 request_time 有可能会比 upstream_response_time 要大

免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

java

2

相关文章推荐

未登录头像

暂无评论