51Testing软件测试论坛
标题:
有关性能测试中性能问题的定位
[打印本页]
作者:
kofwxh
时间:
2010-8-30 16:03
标题:
有关性能测试中性能问题的定位
不知道各位如果在性能测试中发现CPU占用率过高,会用什么方法及工具去定位问题?
作者:
愚人
时间:
2010-8-30 16:06
查进程……看看那个进程高,然后查看代码吧?定位了进程就可以了……
作者:
PrefTest
时间:
2010-8-30 17:04
查看CPU的变化曲线,与虚拟用户图和事务图关联一下,再进一步分析
作者:
楠族开心果
时间:
2010-8-30 17:23
看CPU进程
作者:
msnshow
时间:
2010-8-30 21:29
相信楼主做压力测试的时候,服务器上应该也没有别的进程会占用很多CPU的,个人觉得楼主可以把你压力的范围进行缩减,以发现具体某个模块引起的CPU占用过高
作者:
kofwxh
时间:
2010-8-31 09:37
多谢楼上各位的指教。
我是性能测试新手,目前还没有使用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)
不知道是不是用这个可以解决普遍的性能定位问题?有待检验。
作者:
msnshow
时间:
2010-9-1 22:16
java的使用jprofiler
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2