ユーザ用ツール

サイト用ツール


サイドバー



最近の更新



Tag Cloud

タグ#
6
10
1
3
1
2
17
7
1
1
6
9
4
1
2
177
1
4
2
7
12
5
1
25
2
3
1
6
1
1
30
1
3
3
1
1
1
1
1
1
13
43
7
9
10
5
8
3
2
2
8
2
2
6
3
1
1
4
7
4
2
2
2
1
7
2
4
1
2
20
2
12
2
3
1
1
2
2
1
1
1
3
2
2
4
2
2
1
1
2
1
1
1
2
1
25
2
1
2
2
2
1
1
2
3
12
4
7
1
1
2
8
1
3
1
1
7
1
1
1
1
1
8
1
4
1
2
1
1
1
3
3
4
1
2
1
1
6
3
1
3
1
1
4
1
2
1
2
6
2
1
3
1
1
3
1
2
1
2
2
2
1
2
3
1
1
3
2
1
3
1
1
3
2
1
1
7
1
3
3
1
1
1
1
5
1
17
2
1
2
1
2
2
3
1
1
1
2
1
2
1
1
1
1

01_linux:02_www:40_java_heap_memory

40 Java Heap Memory確認

jsp, jstatはava-1.8.0-openjdk-devel を入れれば入る。

ava-1.8.0-openjdk-devel

jstatの説明

説明
S0Survivor領域0(From)の使用率(現在の容量に対するパーセンテージ)
S1Survivor領域1(To)の使用率(現在の容量に対するパーセンテージ)
EEden領域の使用率(現在の容量に対するパーセンテージ)
OOld領域の使用率(現在の容量に対するパーセンテージ)
PPermanent領域の使用率(現在の容量に対するパーセンテージ)
YGCNew領域のカベージ・コレクションの回数
YGCTNew領域のガベージ・コレクション時間(ミリ秒)
FGC完全カベージ・コレクションの回数
FGCT完全ガベージ・コレクション時間
GCTガベージ・コレクション総時間(ミリ秒)

見やすくするシェル

こちらの人のシェルがめちゃくちゃ分かりやすくて感謝

#!/bin/sh

detected_javahome()
{
    _PID=$1
    JAVA_PATH=$(readlink -f `ps -o cmd= ${_PID} | awk '{print $1}'`) || {
        echo "JAVA_HOME 特定出来ませんでした。"
        exit 1
    }
    echo "`dirname "${JAVA_PATH}"`" | sed -e "s|/jre/bin|/bin|g"
}

java_version()
{
    "${1}/java" -version 2>&1 | grep version | awk -F'"' '{print $2}' |  awk -F'.' '{print $2}'
}

print_gcstat () {
    _PID=$1
    java_home="`detected_javahome ${_PID}`"
    jstat_path="${java_home}/jstat"
    if [ -e "${jstat_path}" ]; then
        java_ver=`java_version "${java_home}"`
        if [ ${java_ver} -gt 7 ]; then
            "${jstat_path}" -gc ${_PID} | tail -1 | awk                                                    \
            '{                                                                                             \
                printf "---------------------------------------------\n";                                  \
                printf "S0  領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $3/1024, $1/1024, ($3/$1 * 100);    \
                printf "S1  領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $4/1024, $2/1024, ($4/$2 * 100);    \
                printf "Eden領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $6/1024, $5/1024, ($6/$5 * 100);    \
                printf "Old 領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $8/1024, $7/1024, ($8/$7 * 100);    \
                printf "Meta領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $10/1024, $9/1024, ($10/$9 * 100);  \
                printf "CCPS領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $12/1024, $1/1024, ($12/$11 * 100); \
                printf "---------------------------------------------\n";                                  \
                printf "YGC 回数 | %7d 回\n" , $13;                                                        \
                printf "YGC 時間 | %7.2f 秒\n" , $14;                                                      \
                printf "FGC 回数 | %7d 回\n" , $15;                                                        \
                printf "FGC 時間 | %7.2f 秒\n" , $16;                                                      \
                printf "---------------------------------------------\n";                                  \
            }'
        else
            "${jstat_path}" -gc $1 | tail -1 | awk                                                         \
            '{                                                                                             \
                printf "---------------------------------------------\n";                                  \
                printf "S0  領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $3/1024, $1/1024, ($3/$1 * 100);    \
                printf "S1  領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $4/1024, $2/1024, ($4/$2 * 100);    \
                printf "Eden領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $6/1024, $5/1024, ($6/$5 * 100);    \
                printf "Old 領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $8/1024, $7/1024, ($8/$7 * 100);    \
                printf "Perm領域 | %7.2f / %7.2f (MB)  | %5.2f%% \n" , $10/1024, $9/1024, ($10/$9 * 100);  \
                printf "---------------------------------------------\n";                                  \
                printf "YGC 回数 | %7d 回\n" , $11;                                                        \
                printf "YGC 時間 | %7.2f 秒\n" , $12;                                                      \
                printf "FGC 回数 | %7d 回\n" , $13;                                                        \
                printf "FGC 時間 | %7.2f 秒\n" , $14;                                                      \
                printf "---------------------------------------------\n";                                  \
            }'
        fi
    fi
}

PID=$1

ps ${PID} | grep [j]ava > /dev/null || {

    _PID=`ps -o uid=,pid=,cmd= -C java | head -1 | awk '{print $2}'`
    echo "---------------------------------------------"
    ps -o uid,pid,cmd -C java
    echo "---------------------------------------------"
    echo -n "Please input the java process id (${_PID}): "
    read PID
    if [ -z "${PID}" ]; then
        PID=${_PID}
    fi
}

ps ${PID} | grep [j]ava > /dev/null && {    
    print_gcstat ${PID}
}

表示

---------------------------------------------
Please input the java process id (6291): 
---------------------------------------------
S0  領域 |    0.00 /  112.00 (MB)  |  0.00% 
S1  領域 |   76.27 /   76.50 (MB)  | 99.70% 
Eden領域 |  174.78 / 2515.00 (MB)  |  6.95% 
Old 領域 | 2657.75 / 5461.50 (MB)  | 48.66% 
Meta領域 |  113.98 /  117.71 (MB)  | 96.83% 
CCPS領域 |   10.18 /  112.00 (MB)  | 92.55% 
---------------------------------------------
YGC 回数 |  206924 回
YGC 時間 | 41329.75 秒
FGC 回数 |     220 回
FGC 時間 |  495.27 秒
---------------------------------------------
01_linux/02_www/40_java_heap_memory.txt · 最終更新: 2019/04/25 17:21 by matsui

Yesterday:132 Today:099 Total:07476