读书人

开掘性能瓶颈的利器-Btrace实例-check

发布时间: 2012-08-30 09:55:54 作者: rapoo

挖掘性能瓶颈的利器-Btrace实例-check 程序中的线程数

Btrace无疑是性能调优的一个非常重要的工具,它可以做到代码无侵入性的挖掘性能的问题,它利用字节码级别的运行时动态植入来check性能问题,性能优化的第一步往往是找出性能的瓶颈,如下面的功能是check程序的运行的线程数:

?

?

/*
?* Copyright 2008-2010 Sun Microsystems, Inc.? All Rights Reserved.
?* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
?*
?* This code is free software; you can redistribute it and/or modify it
?* under the terms of the GNU General Public License version 2 only, as
?* published by the Free Software Foundation.? Sun designates this
?* particular file as subject to the "Classpath" exception as provided
?* by Sun in the LICENSE file that accompanied this code.
?*
?* This code is distributed in the hope that it will be useful, but WITHOUT
?* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
?* FITNESS FOR A PARTICULAR PURPOSE.? See the GNU General Public License
?* version 2 for more details (a copy is included in the LICENSE file that
?* accompanied this code).
?*
?* You should have received a copy of the GNU General Public License version
?* 2 along with this work; if not, write to the Free Software Foundation,
?* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
?*
?* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
?* CA 95054 USA or visit www.sun.com if you need additional information or
?* have any questions.
?*/

package example3;

import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.threadCount;

import java.util.concurrent.atomic.AtomicInteger;

import com.sun.btrace.BTraceUtils.Atomic;
import com.sun.btrace.BTraceUtils.Strings;
import com.sun.btrace.BTraceUtils.Threads;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Export;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.OnTimer;
import com.sun.btrace.annotations.Self;

/**
?* This sample creates a jvmstat counter and
?* increments it everytime Thread.start() is
?* called. This thread count may be accessed
?* from outside the process. The @Export annotated
?* fields are mapped to jvmstat counters. The counter
?* name is "btrace." + <className> + "." + <fieldName>
?*/
@BTrace public class ThreadCounter {

??? // create a jvmstat counter using @Export
??? @Export private static AtomicInteger count=new AtomicInteger(0);

??? @OnMethod(
??????? clazz="java.lang.Thread",
??????? method="start"
??? )
??? public static void onnewThread(@Self Thread t) {
??????? // updating counter is easy. Just assign to
??????? // the static field!
??????? println(Strings.strcat("starting ", Threads.name(t)));
??????? Atomic.addAndGet(count, 1);
??? }

??? @OnTimer(2000)
??? public static void ontimer() {
??????? // we can access counter as "count" as well
??????? // as from jvmstat counter directly.
??? ??? println(Strings.strcat("total thread count:", str(threadCount())));
??????? println(Strings.strcat("start thread count:", str(count)));
??? }
}

读书人网 >编程

热点推荐