4

私が構築した Grails アプリケーション (私が作成した最初のアプリケーション) をデプロイしました。このアプリケーションは、約 2 GB のメモリ使用量で起動します。(トムキャット6)

アプリケーションは、4 つのタイプの間で約 133,000 のドメイン オブジェクトを維持します。DB へのほとんどのトランザクションは、約 115,000 個のオブジェクトの検索と、通常の CRUD 操作/ファイルのインポートとエクスポートです。

何度も使用した後、メモリ スタンプが 3.3 GB であることがわかりました。

最初に - 起動時のメモリ使用量が非常に多いのはなぜですか? Grails はデフォルトでドメイン オブジェクトの使用状況をメモリにキャッシュしますか?

2 つ目 - アプリケーションの多くのポイントで GORM クリーンアップを処理しましたが、メモリ使用量は依然として高い (3.3GB) です。トランザクションのキャッシュなどを引き起こす ORM レイヤーに何かありますか?

ありがとう


---------------編集--------------------

テスト: データベースからすべてのドメイン オブジェクトを削除しました

起動時:514MB

オブジェクトあり: 993 MB (DataSource ファイルに基づいて一部のパフォーマンスを調整しました)


** 情報源 **

dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "xxx"
password = "xxx"
}
hibernate {
cache.use_second_level_cache = false
cache.use_query_cache = true
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
test {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
production {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
}
4

3 に答える 3

2

JVM オプション: -server -Xms512m -Xmx1048M -XX:MaxPermSize=1048m -XX:+UseParallelGC -XX:-UseGCOverheadLimit

JavaMelodyperf4j : - メモリ使用量がどこで、どのように、どのように使用されているかを確認するのに役立ちます

http://burtbeckwith.com/blog/?p=73http://grails.1312388.n4.nabble.com/Memory-leak-td1358871.htmlhttp://www.componentix.comを参照してください。 /blog/8/run-long-batch-processing-jobs-in-grails-without-memory-leaks

于 2012-05-09T18:06:58.773 に答える
2

二次キャッシュクエリキャッシュを使用しているため、メモリ使用量の一部が説明されます。

それを超えて、なぜそんなに多くのメモリを使用しているのかをやみくもに推測するのは困難です。さまざまなことが考えられるため、スイッチの切り替えやトレイルバイファイアのテストを開始する前に、JavaMelodyEhcache monitorなどを使用することをお勧めします。これは、カーテンの後ろで何が起こっているのか、そしてあなたが行った変更の影響を理解するのに役立ちます.

Grails は、いくつかの同等のフレームワークよりもメモリを少し多く消費しますが、このようなパフォーマンスの問題は通常、コード ベース構成によって引き起こされます。また、役立つ可能性があるいくつかの JVM オプションについては、こちらを参照してください。

幸運を。

于 2012-05-02T11:28:51.600 に答える
2

Grails はメモリ ホッグです。

hsqldb または mysql バックエンド データベースを使用していますか?

デフォルトの hsqlbd を使用している場合、Hsqldb のデフォルト設定が問題の原因であると推測されます。

これを DataSource.groovy に追加することをお勧めします

url = "jdbc:hsqldb:file:" + location + "/prodDb_v02;hsqldb.default_table_type=cached;shutdown=true"

最初の部分 jdbc:hsqldb:file:..... は、データベースの場所を設定するだけです

重要な部分は hsqldb.default_table_type=cached; です。

これにより、デフォルトのタイプがメモリからキャッシュに変更されます。

ここにこれについて書いてください...

http://www.jroller.com/alessiopace/entry/hsqldb_memory_and_cached_tables

于 2012-05-01T18:37:26.297 に答える