การใช้งาน CPU คำสั่งด้านบนของ linux ไม่เพิ่มขึ้น / วิธีดูการใช้งานเธรด Java แบบเรียลไทม์

เมื่อฉันรันคำสั่ง top -p <pid> ฉันเห็นว่ากระบวนการนั้นใช้ cpu ประมาณ 10% แต่เมื่อฉันกด "H" เพื่อแสดงรายการเธรด การใช้งาน cpu ของแต่ละเธรดจะแสดงเป็น 0%

เหตุผลที่เป็นเช่นนั้น? ฉันต้องการดูการใช้งาน CPU ของ Java threads แบบเรียลไทม์ ด้านบนไม่ใช่วิธีที่ดีที่สุดใช่ไหม

ภาพหน้าจอ (ก่อนกด H)

ป้อนคำอธิบายรูปภาพที่นี่

หลังจากกด H-

ป้อนคำอธิบายรูปภาพที่นี่


person user375868    schedule 03.01.2014    source แหล่งที่มา


คำตอบ (4)


หากคุณต้องการทำงานกับสคริปต์เช่นเครื่องมือ ก็ยังมี jvmtop ที่ให้การใช้งาน cpu ต่อเธรด

ตัวอย่างเอาต์พุตด้านล่าง

เอาต์พุตตัวอย่าง

person dcernahoschi    schedule 03.01.2014

คุณสามารถใช้ jconsole ได้หากคุณใช้ Sun Java JDK Distribution มันถูกสร้างขึ้นโดยเป็นส่วนหนึ่งของบันเดิลตั้งแต่ Java 1.5 เป็นต้นไป ถ้าจำไม่ผิด คุณสามารถดูเธรด คลาสที่โหลด การใช้หน่วยความจำ และการใช้งาน CPU ของ JVM ได้แบบเรียลไทม์

person shazin    schedule 03.01.2014
comment
ลองใช้ Visualvm เพื่อเริ่มต้น มันจะแสดงให้คุณเห็นการใช้งานเธรดแต่ละครั้งและอีกมากมายเช่น GC ฯลฯ jconsole ก็คล้ายกัน - person zengr; 03.01.2014

คุณสามารถใช้ VisualVM หรือ jconsole

person zengr    schedule 03.01.2014

Java 1.6 และเวอร์ชันที่สูงกว่ามีเครื่องมือ Java ในตัวสำหรับการตรวจสอบ / ดีบักโมดูล Java นี่คือสคริปต์ตัวอย่างด้านล่าง: ` #/bin/bash

#Initilization of variable
CUREENT_DATE=`date -d "0 day" "+%Y%m%d"`      #2012-06-22
CURRENT_MONTH=`date -d "0 month" "+%B%Y"`      #June2012
LAST_DATE=`date -d "1 day ago" "+%Y%m%d"`  #2012-06-21
BASE_PATH="/home/javaMonitoring"
SCRIPT_LOGS="/home/javaMonitoring/logs"
JAVA_PATH=`echo $JAVA_HOME`
PERM=0
MSG="No Message"
HOSTIP="localhost"
THRESHOLD=80;


if [ ! -d $BASE_PATH ];then
        echo " Base Directory not exists![$BASE_PATH]"
        exit
fi
cd $BASE_PATH
if [ ! -d $SCRIPT_LOGS ];then
                echo " Log Directory note found [$SCRIPT_LOGS]"
                mkdir -p $SCRIPT_LOGS
        fi

##LOG Directory
if [ ! -d $CUREENT_DATE ];then
                echo " Log Directory note found [$CUREENT_DATE]"
                mkdir -p $CUREENT_DATE
        fi

log_file_path="$SCRIPT_LOGS/${CUREENT_DATE}-"`basename $0 .sh`".log"

echo "############ Script:$log_file_path##################" >$log_file_path
#####Funcations

cd $JAVA_PATH/bin
BOOTSTRAP=`${JAVA_PATH}/bin/jps|grep Bootstrap|cut -d " " -f1`
if [ $? -ne 0 ];then
                        echo "No Bootstrap PID exists[${JAVA_PATH}/bin/jps|grep Bootstrap]" >>$log_file_path
                        exit

#If log file not exists
else
        if [ ! -f ${BASE_PATH}/${CUREENT_DATE}/gcutil.txt ];then
                touch ${BASE_PATH}/${CUREENT_DATE}/gcutil.txt
                echo "Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT" > ${BASE_PATH}/${CUREENT_DATE}/gcutil.txt
        fi

        ./jstat -gcutil -t $BOOTSTRAP|grep -v Timestamp >> ${BASE_PATH}/${CUREENT_DATE}/gcutil.txt
        PERM=`jstat -gcutil -t  ${BOOTSTRAP}  | grep -v Timestamp|awk -F " " '{print $6}'`

                #if [ ${PERM} -ge ${THRESHOLD} ];then
                if [ $PERM > $THRESHOLD ];then
                         MSG="MCOM: Alert `date` on ${HOSTIP} Server Current Perm is  :: ${PERM}%"

                fi

#continue;
fi `

บันทึกเอาต์พุต :: ../YYYYMMDD/gcutil.txt

Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
        16193.4   0.00  59.95  55.13  93.86  89.63    226   26.192    41   48.532   74.724
        16196.5   0.00  59.95  55.14  93.86  89.63    226   26.192    41   48.532   74.724
person Mohit M    schedule 03.01.2014