• 线上问题定位-Java版


    每当项目在测试环境跑的时候正常,一旦上线生产,就各种问题出现。jvm问题导致tps降低 ,响应慢。cpu飙高,服务高峰期频繁挂起

    其中需要考虑到的方向有很多

    1、环境的差异,传统模式下的部署方式大都基于vm,出现环境的差异是不可避免的,如今的技术先进了很多,docker容器化足以支持环境的差异问题,不过这个也是一个比较优先的方案。

    因此环境的差异化也是影响代码的要素之一

    2、业务访问量差异,一般在测试环境访问量也就公司内部的测试人员在测试,生产上线则是测试环境的N倍数,使用了不恰当的代码,之前偶然协助一个同事定位线上问题的异常,一直定位不到是什么情况出现假死,后来仔细核查,是因为使用了不合理的线程代码,在大量并发的情况下才会出现假死。也是程序猿头疼的因素之一。

    处理以上的方案可以从几个维度触发

    1、利用分析工具找出性能瓶颈

    2、代码内部实现层优化

    3、架构层优化

    这次的定位主要从分析工具定位,代码层跟架构层的优化需要因地制宜会比较好。

    我们当时使用的是继承工具Jstack

    A。jstack排查

    1.查找进程 top

    2.top -Hp 获取占用最高CPU的线程id

    3. printf %x 线程id 转为十六进制

    4. jstack -F <pid> | grep -a5 线程id(十六进制)

    注: 存在账号权限限制

    B。使用jmap排查

    jmap排查 (需要下载 memory analysis 工具分析)

    1、jmap -dump:format=b,file=文件名.bin [pid]

    2、启动脚本:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/equity/$1.bin

    注:

    1.存在账号权限限制

    2.dump存在导致整个服务挂起导致服务不正常的风险

    3、dump的文件比较大,存在占用一定的硬盘空间

    后来,发现阿里出了一个神器阿尔萨斯arthas 极大的降低了运维排查的繁琐操作

    C。arthas排查 

    1、快速开始 使用arthas-boot(推荐) 下载arthas-boot.jar,然后用java -jar的方式启动: wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar

    命令:

    a.Dashboard

    b.thread -n 3 查看cpu最高的线程

    c.jad javax.servlet.Servlet 反编译

    d.Trace com.demo.Test doGet 查看慢的跟踪

    e. ....

    参考文献:https://github.com/alibaba/arthas/blob/master/README_CN.md

  • 相关阅读:
    实验二、作业调度模拟实验
    实验一
    0909 初识操作系统
    实验四、主存空间的分配和回收模拟
    12.27评论5位同学试验三
    实验三进程调度模拟程序
    实验二、作业调度模拟实验
    实验一报告
    实验四 主存空间的分配和回收模拟
    实验三 进程调度模拟程序
  • 原文地址:https://www.cnblogs.com/jimw/p/10455261.html
Copyright © 2020-2023  润新知