美文网首页
java程序线上问题排查基本步骤

java程序线上问题排查基本步骤

作者: kingTao_ | 来源:发表于2020-07-20 13:41 被阅读0次

    java程序线上问题排查基本步骤

    观察cpu、内存使用情况
        1.cpu高
            A:查看是否因内存泄漏导致频繁FGC
            B:无A问题,如果cpu密集型程序,忽略cpu高问题
        2.内存使用高
            A:查看是否内存泄漏
    

    记一次集群中一台服务器查mysql慢

    场景
        1.两台集群,nginx轮询负载
        2.服务器A查数据库T表震荡行慢,10-8000ms
        3.T表分为近期数据表,T和T0-63(sharding-jdbc)
    
    问题1
        原逻辑:查T表->不存在->查历史T0-63
        问题:要检索的数据T表无,会导致穿透T查历史T0-63
        调整:查T表->不存在->根据时间参数判断是否查历史->查历史T0-63
    
    问题2
        1.服务器A/B分别 ping 数据库服务器,发现A的通讯慢10-50倍
        2.找运维确认,A和数据不在同一机柜,用光纤连接的
    
    问题3
        1.问题2带来的思考:非cpu密集程序卡顿,一定是因为阻塞-线程阻塞,导致线程资源无法释放,导致等待资源阻塞
        2.因查库慢,猜测数据库线程池阻塞;但其他查库语句没问题,猜测sharding池阻塞
        3.jstack pid | grep Sharding-JDBC
            结果:sharding-jdbc池只有32,显然不够
            解决:调整到128
    
    结论
        1.首先问题2为物理设备问题,解决代价达,基本不可能调整物理设备
        2.其实问题1为程序逻辑问题,首当其冲优化
        3.最后问题3为中间件使用配置问题,难以发现,只能排除法猜测
    

    相关文章

      网友评论

          本文标题:java程序线上问题排查基本步骤

          本文链接:https://www.haomeiwen.com/subject/mvnekktx.html