perintah linux top Penggunaan CPU tidak bertambah/bagaimana cara melihat penggunaan thread Java secara realtime?

Ketika saya menjalankan perintah top -p <pid>, saya dapat melihat bahwa proses menggunakan sekitar 10% cpu tetapi ketika saya menekan "H" untuk membuat daftar thread, penggunaan cpu dari setiap thread ditampilkan sebagai 0%.

Mengapa demikian? Saya ingin melihat penggunaan CPU thread Java secara realtime, bukankah cara terbaik?

Screenshot (sebelum menekan H)

masukkan deskripsi gambar di sini

Setelah menekan H-

masukkan deskripsi gambar di sini


person user375868    schedule 03.01.2014    source sumber


Jawaban (4)



Anda dapat menggunakan jconsole jika Anda menggunakan Distribusi JDK Sun Java. Itu dibangun sebagai bagian dari bundel dari Java 1.5 dan seterusnya jika saya tidak salah. Anda dapat melihat Thread, Kelas dimuat, Penggunaan Memori dan Penggunaan CPU JVM secara real time.

person shazin    schedule 03.01.2014
comment
cobalah visualvm untuk memulai, ini akan menunjukkan kepada Anda setiap penggunaan utas dan lebih banyak lagi seperti GC dll. jconsole serupa. - person zengr; 03.01.2014

Anda dapat menggunakan VisualVM atau jconsole.

person zengr    schedule 03.01.2014

Java 1.6 dan versi di atasnya memiliki alat java bawaan untuk memantau/men-debug modul java. Berikut contoh skrip di bawah ini: ` #/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 `

OUTPUT simpan di :: ../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