別の投稿で指摘したように、一部の SPIN コンストラクターが非常に限られたデータを実行するのに過度の時間を費やしているという問題があります。別のアプローチを取り、コンストラクターの実行をプロファイリングして、特にどこで過度の時間を費やしているかについての洞察を得ることができるかどうかを確認することにしました。
RDF4J サーバーでコンストラクターの実行をプロファイリングするにはどうすればよいですか? SPARQL update ( INSERT DATA
) クエリを介してインスタンス化しています。RDF4J ワークベンチのシステム情報は次のとおりです。
を使用して、RDF4J サーバーが実行されている Tomcat サーバーのプロファイルを作成しようとしましたが、jvisualvm.exe
あまり洞察が得られませんでした。理想的には、RDF4J 内のクラス/メソッド レベルに到達して、実行速度が遅い問題についてより詳細なリクエストを投稿したり、クエリ自体をより効率的にするように修正したりしたいと考えています。
Java Visual VM のバージョンは次のとおりです。
RDF4J は Apache Tomcat 8.5.5 で実行されています。
Tomcat の概要情報を確認できます。
モニター タブとスレッドも表示されます。
ただし、私が本当に見たいのはプロファイラーです。これにより、遅いクエリがどこで多くの時間を費やしているかを確認できます。Java 1.8用に調整されたプロファイラーがないため、調整でハングします。
このボックスの接続試行は無期限に持続します。これをキャンセルすると、実際には何も実行されず、Java VisualVM を強制終了する必要がある行き止まりのハングである [調整の実行] メッセージが表示されます。
Java Visual VM を強制終了し、再起動して [オプション] --> [プロファイリング] --> [キャリブレーション データ] を確認すると、Java 7 だけにキャリブレーション データがあることがわかります。
Tomcat を Java 7 で実行するように切り替えてみましたが、うまくいきました。
プロファイラーはTomcatを思いつきました:
ただし、Tomcat が Java 7 で実行されているときに RDF4J ワークベンチにアクセスしようとすると、ワークベンチを実行できませんでした。
だから、私はまだ立ち往生しています。RDF4J では、Tomcat が Java 1.7 ではなく、Java 1.8 で実行されている必要があるようです。Java 1.8 でプロファイルできません。
Java VisualVM に関するこの問題に関する他の投稿を見たことがありますが、適用可能な解決策の 1 つは、開発環境 (Eclipse など) ですべてを起動し、ターゲット コードが Java 1.8 で実行されたら、デバッガーのブレークポイントでプロファイラーを動的に呼び出すことです。 . 私はTomcatとRDF4Jでそれを行うように設定されておらず、ポインタが必要です. 私の意図は、Tomcat や RDF4J のコントリビューターになることではありませんでした (私のタスクではそれが許可されていないため... その時間に対して報酬が支払われることはありません) よりも、私の SPIN コンストラクター ( s) RDF4J サーバー クラスの観点から、gitub の RDF4J 開発者コミュニティに助けを求めてください。
Java VisualVM キャリブレーションをバイパスできますか? 失敗するキャリブレーション データを測定しようとする代わりに、Java VisualVM が使用するキャリブレーション ファイルまたはディレクトリをどこかにロードできますか? 絶対的なメトリックではなく、クラスの相対的な CPU 負荷にのみ関心があり、他のマシンの測定値と比較する必要はありません。
ありがとう。