2016-07-19 9 views
0

これは説明が難しい、単なる単純な答えではうまくいかないが、それは価値があると思った。 Javaアプリケーションとやりとりする長いPythonジョブを遅くするかもしれないことに興味があります。アプリケーションは時間の経過と共に減速する - Java + Python

私たちは、デジタルオブジェクトを格納するソフトウェアFedora Commons(FedoraのOSと混同しないでください)と呼ばれるかなり複雑で頑強なWebアプリケーションを実行するTomcatのインスタンスを持っています。さらに、Celeryで長いバックグラウンドジョブを実行するPythonミドルウェアがあります。 1つの特定の仕事は、本の各ページに大きなTIFFファイルがあり、さらに小さなPDF、XML、およびメタデータファイルがある400以上のページブックを取り込むことです。 10〜15分かけて、これらのファイルからデリバティブが作成され、Fedoraの単一のオブジェクトに追加されます。

私たちの問題:1冊の本を摂取する過程で、Javaアプリケーションのデジタルオブジェクトにファイルを追加すると、Fedora Commonsは非常に一貫性があり予想通りに遅くなりますが、その理由や理由は分かりません。

私は、おそらくそれは、Javaとのそれらより多くの経験を積んで認識可能性がある一般的なメモリ管理パターンを偽り、取り込み速度のグラフが役立つかもしれないと思った:

enter image description here

左上のグラフは大きなTIFFをタイミングれますJP2に変換され、その後、Fedora Commonsに取り込まれます。左下は非常に小さなXMLファイルで、デリバティブは作成されず、取り込まれます。ご覧のように、カーブのスローダウンはほとんど同じです。右側の2つのプロセスは一緒にグラフ化されています。

Java(GC)でガベージコレクションについて学び、さまざまな設定を試してみましたが、減速にはあまり効果がありません。それが助け場合は、ここで我々は(私は主に診断されていると信じてテールエンド)Tomcatに渡している一部のメモリー構成は以下のとおりです。

JAVA_OPTS='-server -Xms1g -Xmx1g -XX:+UseG1GC -XX:+DisableExplicitGC -XX:SurvivorRatio=10 -XX:TargetSurvivorRatio=90 -verbose:gc -Xloggc:/var/log/tomcat7/ggc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC'

私たちは、このVM上のRAMの12GBで作業しています。

私は、この動作につながる可能性のある要因の数が、チャートからの言い訳を許していることを認識しています。しかし、私たちはFedora CommonsとPythonミドルウェアをしばらく使っており、ほとんど成功しています。この遅れは、あまりにもあなたについても間違っているかもしれませんが、あなたの時計はあまりにも疑わしいJava /ガベージコレクションに関連すると感じるかもしれません。

これ以上の掘り下げについての助力やアドバイスはありがたいです!

+0

は、jython経由でjvm上で実行されているpythonの部分ですか?それとも別のプロセスですか?後者の場合は、まず機械全体のどの部分が減速するか、つまりJavaかPythonのどちらであるかを特定する必要があります。 – the8472

+0

Psi-ProbeをFedora Commons Tomcatインスタンスに追加してみてください。仕事の完了時のみを見ることで、Fedora Commonsのどのコンポーネントをインストールして減速の原因となっているのかを知ることはできません。問題は、Fedora、gSearch、Solr、またはDjatokaです。 Psi-Probeを追加することで、サーブレットレベルでパフォーマンスをチェックし、問題をより正確に特定することができます。 https://psi-probe.github.io/psi-probe/ –

+0

これは素晴らしいです、ありがとう@RickSarvas!私は、これらのコンポーネントの多くが、私たちが使用していないIslandoraと手を携えていると認識しています。しかし、Psi-ProbeはTomcatには一般的に聞こえるので、非常に便利かもしれません。提案を感謝します。 – ghukill

答えて

0

GCとTomcat分析に関する提案に感謝します。明らかに、Fedora Commonsがデジタルオブジェクトを構築する方法のせいで減速が起こった。私は非常に単純なデジタルオブジェクトを作成し、ゼロサイズのデータ​​ストリームに反復して追加し、進捗状況を見て、これを分離することができました。それが私たちの特定のインジェスト方法やファイルのサイズではないことを示唆したとほぼ同じ減速のカーブ、

graph of adding datastreams

:あなたは下のグラフで確認することができます。さらに、old forum posts about Fedora Commonsを掘り下げて、単一のオブジェクトが多数のデータストリームを含むことを意図していないことを確認しました。

この知識が、デジタルオブジェクトの知的組織の後ろで難しくなったのは興味深いでしょう。具体的には、あなたがFedoraで取るパフォーマンスヒットではありませんが、それは別のフォーラムのための餌です。

もう一度お寄せいただきありがとうございます - 他に何もない場合、Fedoraの通常の使用法はより細かくチューニングされ、以前よりよくうまくなります。

-1

あまり目立たないGC設定を調べるのではなく、明示的にメモリを管理して、GCが実行に大きな影響を与えないようにすることができます。

+0

"明示的にメモリを管理する"と言うと、Javaコードの意味ですか? Fedora Commonsコードの編集や更新はできませんが、Pythonコードにアクセスできます。 – ghukill

+0

はい、私はJavaについて話していましたが、Pythonの割り当ても見てみることができます。 puhlenが言ったように、あなたはまた、いくつかの他のメトリック、CPU負荷、メモリ使用量などを調べるべきです。これらがなければ、推奨を与えるのは難しいです。 –

0

GCは問題と思われますが、GCメトリックは表示されません。プロファイラを使用してプログラムを実行し、GCに過負荷がかかる理由を確認します。原因を特定せずに問題を解決することは困難です。

問題が見つかったら、GC設定を調整する代わりにコードを変更する必要があります。

+0

提案を気に入ってください - プロファイリングまで私ができることを見ていきます。私はGCCのログを見てきました。私は "マイナーな" GCを意味するかもしれないと思ったたくさんの "呼び出し"を見ましたが、多くの主要なものはそうではありませんでした。しかし、合意したプロファイリングの結果は助けになるでしょう(GC Tomcatの設定は、Fedora Commonsの取り込みプロセスのプロファイリングとチューニングのためのものです)。 – ghukill

+0

残念ながら、GC呼び出しの数が多いのは、特に速度は最適化されていないが、リソース使用率が最適化されていないアプリケーションでは、Javaコードにとってかなり標準的です。 –

関連する問題