51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2313|回复: 6
打印 上一主题 下一主题

[原创] 有关性能测试中性能问题的定位

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-8-30 16:03:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道各位如果在性能测试中发现CPU占用率过高,会用什么方法及工具去定位问题?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-8-30 16:06:37 | 只看该作者
查进程……看看那个进程高,然后查看代码吧?定位了进程就可以了……
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2010-8-30 17:04:40 | 只看该作者
查看CPU的变化曲线,与虚拟用户图和事务图关联一下,再进一步分析
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    4#
    发表于 2010-8-30 17:23:25 | 只看该作者
    看CPU进程
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    5#
    发表于 2010-8-30 21:29:10 | 只看该作者
    相信楼主做压力测试的时候,服务器上应该也没有别的进程会占用很多CPU的,个人觉得楼主可以把你压力的范围进行缩减,以发现具体某个模块引起的CPU占用过高
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2010-8-31 09:37:19 | 只看该作者
    多谢楼上各位的指教。

    我是性能测试新手,目前还没有使用LoadRunner这种重量级选手  所以三楼所说的“虚拟用户图和事务图”目前无从下手

    我现在手头主要使用的工具是JConsole,为了试验对CPU占用问题的跟踪,我自己写了个程序如下:

    1 package test;
    2
    3 import java.util.concurrent.TimeUnit;
    4
    5 public class ThreadCPUUsage {
    6
    7     public static void main(String[] args) {
    8         Thread thread = null;
    9         for (int i = 0; i < 10; i++) {
    10             thread = new Thread(new Runnable(){
    11             @Override
    12             public void run() {
    13                 while(true){
    14                 try {
    15                     System.out.println("Thread "+ Thread.currentThread().getName()+ "is running");
    16                     int i = 100000000;
    17                     while(i-->0){
    18                        
    19                     }
    20                     TimeUnit.SECONDS.sleep(1);
    21                 } catch (InterruptedException e) {
    22                     // TODO Auto-generated catch block
    23                     e.printStackTrace();
    24                 }
    25               
    26             }
    27             }
    28               
    29             }, "thread"+i);      
    30            
    31             thread.start();           
    32         }
    33     }
    34   
    35 }

    这段代码明显消耗CPU时间的地方在这个地方:
    int i = 100000000;
                        while(i-->0){
                           
                        }

    使用jconsole + topthread 工具查看,可以看到一般thread的调用信息

    java.lang.Thread.sleep(Native Method)
    java.lang.Thread.sleep(Thread.java:298)
    java.util.concurrent.TimeUnit.sleep(TimeUnit.java:328)
    test.ThreadCPUUsage$1.run(ThreadCPUUsage.java:20)
    java.lang.Thread.run(Thread.java:619)

    但是都没有定位到出问题的代码行上,无意中点击在topthread插件列表中最顶上一行的thread,查看到thread调用信息为:
    test.ThreadCPUUsage$1.run(ThreadCPUUsage.java:17)
    java.lang.Thread.run(Thread.java:619)

    不知道是不是用这个可以解决普遍的性能定位问题?有待检验。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    7#
    发表于 2010-9-1 22:16:02 | 只看该作者
    java的使用jprofiler
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-24 02:02 , Processed in 0.068715 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表