2

Tomcat アプリケーション (Hibernate + EhCache で構成) を実行しています。多くのクラスを作成するべきではない典型的な ORM webapp です。ただし、ネイティブ メモリ トラッキングでは「いいえ」と表示されます。

過去 24 時間、私の webapp は、Metaspace で平均して 1 時間あたり約 1 つの新しいクラスを作成し、ピークでは 1 時間あたり 11 クラス、ピークでは 4 時間、クラスを作成しませんでした。

それで、7449 クラスから始めて、24 時間後には 7481 クラスになりました。フル GC を誘導した後、クラスの数は 0 ~ 2 減少する可能性がありますが、全体的には同じままです。

そう

  1. クラスが遅延ロードされる場合、ネイティブ メモリに作成されるクラスの総数をどのように推定できますか?

    • Hibernate がプロキシ クラスを作成することは知っています。これらのプロキシ クラス数を予測する方法はありますか?
    • JVMにすべてのクラスを熱心にロードさせる方法は?
  2. Metaspace にロードされた新しいクラスをログに記録するにはどうすればよいですか?

私の構成:

Server version: Apache Tomcat/8.0.28
OS Name:        Linux
OS Version:     3.14.34-27.48.amzn1.x86_64
Architecture:   amd64
JVM Version:    1.8.0_71-b15
JVM Vendor:     Oracle Corporation

JVM flags: -Xms512m -Xmx2G -XX:+UseG1GC -XX:NativeMemoryTracking=summary -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
Hibernate 4.3.1
4

1 に答える 1

2

これらのプロキシ クラス数を予測する方法はありますか

一般的に、いいえ。理論上、アプリケーションはクラス ファイルのバイトコードをいつでも発行できます。

JVMにすべてのクラスを熱心にロードさせる方法は?

できません。遅延クラス・ローディングは Java 機能の 1 つです。クラスパスをスキャンして、すべての JAR からすべてのクラスをロードすることもできますが、それは何千もの未使用のクラスになるため、やりたいことではありません。

Metaspace にロードされた新しいクラスをログに記録するにはどうすればよいですか?

使用する-XX:+TraceClassLoading

于 2016-02-19T08:21:21.003 に答える