1
0

More than 3 years have passed since last update.

Java アプリで CPUプロファイリング

Posted at

環境

Linux 環境準備

Vagrant を使って環境を作る。bento/ubuntu-18.04 を使うことにする。Linux perf tools が必要。

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.synced_folder "./data", "/vagrant_data",create:true

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1536"
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get upgrade -y
    apt-get install -y build-essential cmake openjdk-11-jdk maven default-jdk linux-tools-$(uname -r) linux-tools-generic apache2-utils
  SHELL
end

ツールの準備

環境変数 FLAMEGRAPH_DIR で perf-map-agent から FlameGraph を使えるようにする。

git clone --depth 1 https://github.com/jvm-profiling-tools/perf-map-agent.git
git clone --depth 1 https://github.com/brendangregg/FlameGraph.git

cd perf-map-agent
cmake .
make

プロファイリング対象になる JVM の実行時オプションに -XX:+PreserveFramePointer を追加する必要がある。

perf top

CPU 時間を使っている関数、Java メソッドが見える。root ユーザーで実行する。

`perf-java-top <PID>`

出力例

  34.28%  [kernel]            [k] finish_task_switch
   1.26%  [kernel]            [k] _raw_spin_unlock_irqrestore
   0.44%  [kernel]            [k] do_syscall_64
   0.43%  perf-5228.map       [.] Lorg/glassfish/json/JsonGeneratorImpl;::writeEscapedString
   0.39%  perf-5228.map       [.] Lcom/ibm/ws/tcpchannel/internal/ChannelSelector;::run
   0.38%  perf-5228.map       [.] Interpreter
   0.35%  libjvm.so           [.] 0x00000000009b7238
   0.34%  perf-5228.map       [.] Lorg/apache/cxf/jaxrs/utils/JAXRSUtils$3;::run
   0.31%  perf-5228.map       [.] Lorg/jboss/weld/manager/BeanManagerImpl;::getReference

Flame Graph

Flame Graph を出力する。root ユーザーで実行する。環境変数 FLAMEGRAPH_DIR で FlameGraph のインストールパスを指定する。デフォルトでは 15 秒のみプロファイリングを行うが、環境変数 PERF_RECORD_SECONDS で時間を変更可能。

export FLAMEGRAPH_DIR="/home/vagrant/github/FlameGraph"
./perf-java-flames <PID>

出力例
スクリーンショット 2021-05-23 2.14.17.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0