Pivotal Knowledge Base

フォローする

GemFire の問題解決のための基本情報収集方法

環境

製品 バージョン
Pivotal GemFire 6.6.x 〜 8.2.x
OS 全てのサポート対象 OS

目的

本文書は、GemFire 関連の問題解決のため、ログや統計ファイル、スレッドダンプ、ヒープダンプといった基本的な情報を収集するためのガイドラインを提供する。

動機

  • 全ての GemFire の問題に対して、サポート部門では、問題が発生した時間帯における、全てのクラスターメンバーのログ、統計ファイルが必要となる。
  • 無応答状態(ハング)の場合(予定外の "再起動" が必要となる任意のタイミングで発生)は、サポート部門では、最低限、無応答状態となっていると思われるメンバーのスレッドダンプも必要となる。
  • チューニング関連の問題の場合、サポート部門では、GC ログも必要となる。
  • メモリ不足やメモリリークといった問題の場合は、ヒープダンプも必要となるであろう(ヒープダンプ取得が不可能な場合は、最低限ヒープヒストグラム)。

手順

1. ログ:

  1. Locator、CacheServer、GemFire Agent のログ

    gemfire.properties ファイルの log-file プロパティー、あるいは起動スクリプトのパラメーターとして定義された箇所から、問題発生時のログをコピーする。例えば、gemfire.properties ファイルでは以下のように定義されている。

    log-level=fine
    log-file=log/cacheserver1.log

    ヘッダーとメンバーの起動時情報を含む完全なログを取得するようにする。それらの情報は問題解析時に有用である。

  2. Java Client ログ

    Java クライアントコード、あるいは gemfire.properties ファイルに定義された箇所から任意のクライアントログファイルをコピーする。例えば、コードの場合は以下のように定義されている。

    ClientCache cache = new ClientCacheFactory()
      .set("name", "CqClient")
      .set("cache-xml-file", "xml/CqClient.xml")
      .set("log-level", "fine")
      .set("log-file", "cqclient.log")
      .create();
  3. Native Client ログ

    gfcpp.properties ファイル、あるいはネイティブコードで定義されている箇所からログをコピーする。例えば、gfcpp.properties の場合は以下のように定義されている。

    log-level=fine
    log-file=log/nativeclient1.log
  4. Databrowser ログ

    以下の、Databrowser の "Options" 設定メニューに定義されているパスからログをコピーする。

    Options-->Preferences-->Miscellaneous-->Log file directory

    例えば、以下のようなパスとなる。

    C:\Users\userxxxx\GemStone\GemFire\DataBrowser\logs\data-browser_7916.log.0
  5. GFMon ログ

    以下の、GFMon の "Preferences" 設定ダイアログに定義されているパスからログをコピーする。

    Preferences-->General-->Log file directory

    例えば、以下のようなパスとなる。

    C:\Users\userxxxx\GemStone\GemFire\GFMon\logs\2013-12-30-22-26-31-849_8366723371373487377_gfmon.log
  6. Security ログ

    gemfire.properties ファイル、あるいは gfsecurity.properties ファイルの security-log-file プロパティーで定義されているパスからログをコピーする。例えば、gemfire.properties の場合は以下のように定義されている。

    security-log-file=log/locatorsecurity.log
  7. GFSH ログ

    デフォルトでは、gfsh のセッションログ出力は無効となっている。gfsh のログ出力を有効にするには、-Dgfsh.log-level=<ログレベル> という Java システムプロパティーを設定する必要がある。なお、ログレベルは次の値より選択する: severe、warning、info、config、fine、finer、finest。例えば、Linux の場合は以下のよう設定する。

    $ export JAVA_ARGS=-Dgfsh.log-level=info

    その後、gfsh を起動する。

    gfsh 実行ディレクトリーからログをコピーする。例えば、gfsh コマンドを /home/user1/GemWorkdir1 配下で実行した場合は、gfsh ログは以下のようなファイルに生成される。

    /home/user1/GemWorkdir1/gfsh-2013-12-31_17-36-25.log
  8. GC ログ

    GC ログは JVM への起動パラメータの付与で有効化する。GemFire における GC チューニング関連問題のため GC ログを有効化するには、以下のパラメーターを付与する。

    -XX:+PrintGC     (あるいはそのエイリアスの -verbose:gc)
    -XX:+PrintGCDetails
    -XX:+PrintGCTimeStamps
    -Xloggc:<ファイル名>

    GC ログファイルのパス・ファイル名を指定するため、-Xloggc を使用する。デフォルトでは、標準出力にログ出力される。

    GC ログのオーバーヘッドは多くの場合小さく、一般的に有効化することが推奨される。しかしながら、JVM 起動時に有効化するかどうか決定する必要がないことは知っておくと良い。JVM には "manageable" と呼ばれるフラグのカテゴリーが存在する。manageable フラグにおいては、稼働中にその値を変更することが可能である。全ての、"PrintGC" から始まる GC ログフラグは "manageable" カテゴリーに属する。したがって、JVM 稼働中に GC ログの有効化、無効化を実施することが可能である。 

    Manageable フラグは、HotSpotDiagnostic MXBean の setVMOption オペレーションをコールするような JMX クライアントか、JDK 付属の jinfo ツールによって設定可能である。

2. 統計ファイル:

  1. Locator の統計ファイルと、Cache Server の統計ファイル

    gemfire.properties ファイルの statistic-archive-file プロパティーで定義されている箇所から任意の統計ファイルをコピーする。以下 gemfire.properties における設定例を示す。

    statistic-sampling-enabled=true
    statistic-archive-file=myStatisticsArchiveFile.gfs
    enable-time-statistics=false

    statistic-sample-rate はデフォルトのサンプリングレートである 1,000 ミリ秒から変更することは可能であるが、システムへの影響を最低限に抑えるため変更すべきではない。

    なお、注意点として、時間ベースの統計取得(enable-time-statistics 値で設定)は、開発環境かテスト環境でのみ有効化し、運用環境では無効とすべきであることに留意したい。時間ベースの統計取得は、GemFire のパフォーマンスに多大な影響を与えるためである。

    統計ファイルのローリングを設定するには、以下のパラメーターを適用する。

    archive-disk-space-limit=1000
    archive-file-size-limit=100

    これにより、gfs ファイルのサイズが 100MB に達するとローリングされ、直近 10 ファイル分を保持するようになる。

  2. Java Client の統計ファイル

    当該クライアントソースコードか gemfire.properties ファイルに定義されているパスから任意のクライアントサイドの統計ファイルをコピーする。以下、ソースコードにおける設定例を示す。

    ClientCache cache = new ClientCacheFactory()
      .set("name", "CqClient")
      .set("cache-xml-file", "xml/CqClient.xml")
      .set("log-level", "fine")
      .set("log-file", "cqclient.log")
      .set("statistic-archive-file", "myClientStats.gfs"
      .set("statistic-sampling-enabled", "true")
      .create();
  3. Native Client の統計ファイル

    当該クライアントソースコードか gfcpp.properties ファイルの statistic-archive-file プロパティーで定義されている箇所から任意の統計ファイルをコピーする。以下、gfcpp.properties における設定例を示す。

    statistic-sampling-enabled=true
    statistic-archive-file=myClientStats.gfs

    統計情報についての詳細は、以下のドキュメントも参照のこと。
    http://gemfire.docs.pivotal.io/docs-gemfire/latest/managing/statistics/setting_up_statistics.html

3. スレッドダンプ

ハングやパフォーマンスの問題といったいくつかの事象に対しては、解析のためサーバーやクライアントからのスレッドダンプ取得は基本である。一定時間、定期的に複数回(例えば、2〜3 秒ごと)スレッドダンプを取得することが推奨される。

スレッドダンプは以下の手順を用いて取得することが可能である。

  • 手順 1. 対象となる GemFire のプロセス ID を取得する。すなわち、以下のコマンドにて取得する。
    $ jps -l
    7904 sun.tools.jps.Jps
    5388 sample.JClient
    
  • 手順 2. スレッドダンプを生成する。

    Solaris や Linux、その他 UNIX 系プラットフォームでは、以下のように、GemFire の Java プロセスに対して SIGQUIT シグナルを送ることでスレッドダンプを生成することができる。

     kill -QUIT <プロセス ID>

    Windows では、GemFire の Java プロセスを起動したコマンドプロンプト上で CTRL + Break キーを押下することで生成することができる。

    代替手段として、以下のツールでもスレッドダンプを生成することができる。

    1. jstack コマンド: jstack <プロセス ID>
    2. Java VisualVM (jvisualvm)
    3. jconsole

4. ヒープダンプ

Out-of-Memory やメモリリークといった問題の調査には、ヒープダンプが当該問題を引き起こしている原因究明の一助となる。

GemFire プロセスのヒープダンプ生成手順は以下の通り。

  • 手順 1. 先ず始めに、jps 等を用いて GemFire のプロセス ID を特定する(スレッドダンプを生成する際の手順と同様)。
  • 手順 2. ヒープダンプを生成する。
    1. jmap コマンドを使用
      [JDK インストールディレクトリ]/bin/jmap -dump:live,format=b,file=heap.dump.out <pid>>
    2. Java VisualVM(jvisualvm)を使用する。
      1. run [JDK インストールディレクトリ]/bin/jvisualvm
      2. 対象プロセスを選択し、メニューより [Application]→[Heap Dump] とたどり、ヒープダンプを生成し、[Save As] で "to local disk" を指定。
    3. "Out Of Memory" エラー発生時に自動的にヒープダンプを取得する。

      Java プロセス起動前に、以下の JVM パラメーターを追加する。

      -XX:+HeapDumpOnOutOfMemoryError<
      -XX:HeapDumpPath

      例えば以下のようになる(Windows の場合)。

      JAVA_OPTS=%JAVA_OPTS% "-XX:+HeapDumpOnOutOfMemoryError" "-XX:HeapDumpPath=C:\TEMP"

 

追加情報

 

コメント

Powered by Zendesk