1

Tomcat (6 および 7) でGrails アプリの実行速度が 4 倍遅い理由について、だれかアイデアがありgrails run-appますか? それ以外の場合は、これを自分で追跡する方法についての一般的なアドバイスをいただければ幸いです。

状況

かなり集約的な XML 処理 (解析、xpath、シリアライゼーション) を行う Web アプリを持っています。大規模な入力の場合、 を介して実行すると、結果を返すのに約 5 秒かかりますgrails dev run-app)。

tomcat6 で同じアプリを実行すると、4 倍遅くなります。

grails dev war
cp target/app.war /path/to/tomcat[6|7]/webapps

同じアプリ、同じ環境、同じマシン:同じ POST に応答するのに 4 倍 (20 秒) かかります。

  • エラーは tomcat に記録されていません。私が期待するログ出力だけ
  • Tomcat が非デバッグ モードで実行されている (Ubuntu 13.04 のデフォルト設定 + -XX:MaxPermSize=512m)
  • 同じ Java バージョン

アップデート

Tomcat では、次の実行が約 12 倍遅くなるようです。

XPathFactory.newInstance().newXPath()

...そして、私は、ええと、それをよく呼んでいました。さて、それは今修正されましたが、私はまだ知りたいです:

  1. Tomcat でこれが非常に遅くなる原因は何ですか?
  2. この発見にもっと簡単にたどり着くために、どのようなツールやアプローチを採用できたでしょうか? (これを理解するために、手動で多くのデバッグを行いました。)
4

1 に答える 1

1

サービス プロバイダーのメカニズムは、XPathFactory の実装として使用されるクラスを決定します。ファイルを含むクラスパス上の JAR ファイルはMETA-INF/services/javax.xml.xpath.XPathFactory、JRE のデフォルトの実装を置き換えることができます。

ほとんどの場合、クラスパスは開発環境と本番環境で異なります。

どの実装が使用されているかを確認するには、 を印刷できますXPathFactory.newInstance().newXPath().getClass()。JRE の内部実装はcom.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.

于 2013-09-06T09:40:11.857 に答える