8

tomcat 6でliferayポータルを実行しています。各ポートレットは含まれているWebアプリケーションであるため、ポートレット自体が必要とするすべてのライブラリが含まれています。現在、30以上のポートレットがあります。この結果、Tomcatのpermgenは、デプロイするポートレットごとに増加します。

これで、たどることができる2つのパスができました。各ポートレットで一般的に使用されているライブラリの一部をTomcat共有ライブラリに移動します。これには、permgenサイズを小さくするためのspring / hibernate / cxf / ....のようなものが含まれます。または、permgenサイズを大きくする方が簡単です。

この2番目のオプションを使用すると、すべてのポートレットを自己完結型のエンティティとして保持できます。

ここでの問題は、permgenサイズを増やすことによるパフォーマンスへの悪影響はありますか?現在512MBで稼働しています。私はこれについてほとんどまたはまったく情報を見つけませんでした。しかし、問題なく1024MBのpermgenサイズで実行することについて人々が話しているという投稿がいくつか見つかりました。

4

3 に答える 3

3

サーバーに十分なメモリがある限り、何かがうまくいかないことは想像できません。そうしないと、Tomcatも起動しません。おそらく、十分なメモリを割り当てることができないためです。だから、それが起動した場合、あなたは良いです。私の経験では、1GBのPermGenは完全に健全です。

大きなPermGenの欠点は、ヒープ(Xmx)に割り当てることができるシステムメモリが少なくなることです。

一方、ポートレットを自己完結型のエンティティとして考えることの利点を再検討することをお勧めします。例えば:

  • 相互運用性の問題:すべてのポートレットが同じライブラリの異なるバージョンを使用する可能性がある場合、それらが相互に、および意図したとおりにポータル自体と連携しないリスクがあります。
  • パフォーマンス:PermGenフットプリントは1つだけですが、ポートレットのあちこちにjarを追加するには、追加のファイル記述子が必要になります。Windowsについてはわかりませんが、長期的にはLinuxサーバーのパフォーマンスに悪影響を及ぼします。
  • 変更の自由:Mavenを使用してポートレットを構築している場合、lib/extライブラリからポートレットのlibライブラリに切り替えるには、依存関係のスコープを変更するだけです(これはポータルライブラリではさらに煩わしい場合があります)。私が覚えている限り、Liferay SDKでは、依存関係を解決するためのantタスクを追加し、lib必要に応じてポートレットから削除することで、antを使用して同様の切り替えを簡単に行うことができます。
于 2012-04-22T01:27:23.087 に答える
1

PermGenメモリは、フルコレクションによってガベージコレクションされる可能性があるため、メモリを増やすと、フルコレクションが行われるときのGC時間が長くなる可能性があります。

ただし、これらのコレクションはあまり頻繁に行われるべきではなく、通常は1秒未満で完全なGC 1GBのpermgenメモリが必要になります-私はこの数値を(私のややぼんやりとした)メモリから取得しているだけなので、本当に心配している場合はいくつかのタイミングテストまでのGC時間(-verbose:gcログを使用して読んでください。詳細はこちら

于 2012-04-22T01:50:33.217 に答える
0

PermgenのサイズはOLDGenの範囲外です。したがって、混同しないでください。2番目の点で合意しました-メモリはかなり安いので、permsizeをできる限り増やすことができます-しかし、これはコードをどのように管理しているかについていくつかの疑問を提起します。なぜこれだけのパーマが必要なのか-JTaはそれだけ消費しているのか-ロードしているクラスの数は?アプリが開いているファイル記述子の数(lsofコマンドで確認)。私たちはそれらに答えようとするべきです。

于 2014-10-20T12:39:32.457 に答える