zoukankan      html  css  js  c++  java
  • 性能定位的一些方法

    问题背景:

    Tps约50左右,10线程与50线程压测tps一致,只响应时间不断增加,数据库服务器资源占用较低,而应用服务器cpu维持在一定值之后随着并发数增加,cpu不再增高,凭经验判断,应该跟代码实现有关;

    所以直接找引发问题的代码;

    快速手段如下:

    使用top命令查看当前进程的资源占用情况,通过下图我们看到PID为4501的进程为java的主要活动进程

     使用top –Hp 4501来查看-H 显示线程 -p 指定pid   如果执行上述命令之后,发现还是只有一行,那么按下 shift+h, 即可显示线程占用资源情况,此处占用CPU最高的线程的PPID是15894

    扑捉到线程后,需jstack跟踪,此时线程号转化为16进制,

    使用命令 jstack 4501 |grep -i 3e16   来查询进程详细信息

    此时与开发沟通,在代码实现中,在合并账户加锁,在并发中,导致大量线程等待,后来通过锁账户改成锁收据单,锁粒度降低,改完后,重新测试,tps达到300,随着并发数增加,cpu资源升高,根据硬件消耗与tps对比,达到正常;

    在举一例

    定时任务,执行时间过长;

    经过监控,内存瞬间达到极致,回收缓慢,程序卡顿严重,通过jmap(上述类似方法,也可以jvisual)追踪代码,某方法再一次执行中提交大量数据,后经与开发讨论修改数据量,并反复压测验证,达到最优配置,从原来的20min执行时间缩短为2min,且内存回收正常(如下图);

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/changyou615/p/8919037.html
Copyright © 2011-2022 走看看