性能测试

来源:互联网 发布:股票交易软件源码 编辑:程序博客网 时间:2024/05/20 11:20

Cpu高或者i/o高都可以dump线程栈分析问题,一般可能要连续dump几次,dump出来后要关注状态。

第二:cpu

第一先看是sys还是ur

如果是syscpu高:

第一如果是I/o造成的:

如果nmondiskbusy比较高,超过30%。说明syscpu高是I/o引起的,则需要去看cpu在读什么(大量的读说明内存不够了,此时要从磁盘中读),写什么(看请求在写东西,如果是线上的则需要看线上的日志)造成的cpu高(用sar命令看磁盘的队列,如果比较长,说明cpu高是磁盘导致)

如果不是I/o造成的,则用strack命令看内核调用情况。

第二是urcpu

则需要应用程序本身,是什么造成的cpu

  1. 首先:要找到cpu使用过高的进程(用top命令【按Pcpu的大小排序,按M按照内存排序)】(使用top命令,如果是多核cpu的话,就看cpus就可以了,多核cpu,使用率超过100很正常,是各个cpu的和)
  2. 第二步:找到cpu高的进程下的具体消耗cpu高的线程(使用命令top –H p  pid)【同理还是按P进行cpu排序,则能找到消耗cpu最高的线程】
  3. 将找到的线程id转换成十六进制,具体的命令

printf  “%x\n”  tid  (tid是线程的id)

  1. 最后使用jstack命令,具体命令

 Jstack  pid |grep 十六进制的tid

注释:pid是第二步中的pid,十六进制的tid是第三步中的

到此则可以定位到urcpu过高的原因

Ps:

通过该命令也可以定位消耗cpu高的

ps -mp pid -o THERAD,tid,time



定位cpu高的原因:

第一种:上面这种方法

第二种:jprofiler中的cpu的热点视图

第三种:jvisualVM中的cpu抽样


0 0
原创粉丝点击