0

これは説明するのが難しいものであり、単一の単純な答えには期待できませんが、試してみる価値はあると思いました. Java アプリケーションと対話する長い Python ジョブを遅くする可能性があるものに興味があります。

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

私たちの問題: 1 冊の本を摂取する過程で、Java アプリ Fedora Commons のデジタル オブジェクトにファイルを追加すると、非常に一貫して予測どおりに遅くなりますが、その方法や理由がわかりません。

取り込み速度のグラフが役立つかもしれないと思いましたが、Java の経験が豊富な人が認識できる一般的なメモリ管理パターンとは異なる可能性があります。

ここに画像の説明を入力

左上のグラフは、大きな 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'

12GBこの VM の RAM を使用しています。

この行動につながる可能性のある要因の数は、しゃれを許して、チャートから外れていることに気づきました。しかし、私たちはかなり長い間 Fedora Commons と Python ミドルウェアを使用してきましたが、ほぼ成功しています。この速度低下は、時計を設定することもできますが、Java / ガベージ コレクションに関連していると疑わしく感じますが、それについても非常に間違っている可能性があります。

さらに掘り下げるためのヘルプやアドバイスをいただければ幸いです。

4

3 に答える 3

0

GC と Tomcat 分析に関する提案に感謝します。結局のところ、減速は完全に Fedora Commons がデジタル オブジェクトを構築する方法によるものでした。非常に単純なデジタル オブジェクトを作成し、ほぼゼロ サイズのデータ​​ ストリームを繰り返し追加して進行状況を監視することで、これを特定することができました。これは、次のグラフで確認できます。

データストリームの追加のグラフ

速度低下の曲線はほぼ同じであり、特定の取り込み方法やファイル サイズによるものではないことが示唆されました。さらに、単一のオブジェクトが多数のデータストリームを含むことを意図していないことを確認する、Fedora Commons に関する古いフォーラム投稿を掘り下げるように促されました。

この知識が、デジタル オブジェクトの知的組織化の背後でどのように難読化されたか、特に Fedora でのパフォーマンス ヒットではなく、おそらく興味深いことですが、それはおそらく別のフォーラムのネタになります。

提案をしてくれたすべての人に再び感謝します - 何よりも、Fedora の通常の使用法は以前よりも微調整され、うまく機能しています。

于 2016-07-22T12:21:42.190 に答える
0

GC が問題であると思われますが、GC メトリクスは表示されません。プログラムをプロファイラーに通して、GC が過負荷になっている理由を確認してください。原因を特定せずに問題を解決することは困難です。

問題がどこにあるかを見つけたら、GC 設定を微調整するだけでなく、コードを変更する必要がある可能性があります。

于 2016-07-19T13:18:36.747 に答える
-1

まあ、あいまいな GC 設定を調べる代わりに、メモリの管理を明示的に開始することをお勧めします。そうすれば、GC は実行にそれほど影響しません。

于 2016-07-19T13:12:50.837 に答える