legacy-knowledge-base
公開されました Jul. 2, 2025

JRubyのメモリ問題の最小化

投稿者

Liferay Support

knowledge-article-header-disclaimer-how-to

knowledge-article-header-disclaimer

legacy-article

learn-legacy-article-disclaimer-text

この記事はレガシー記事です。 以前のバージョンのLiferay製品にも適用されます。 記事がメンテナンスされなくなったとはいえ、まだ該当する可能性があります。

この記事では、プログラミング言語RubyのJava実装であるJRubyに起因するメモリの問題を取り上げています。 Liferay Portalでは現在、CSSの処理を目的にSassを実行するためにJRubyを使用しています。

決議

以下のリストは、Liferay環境におけるJRubyのメモリへの影響を軽減するために取られる可能性のあるいくつかの手順を概説したものである。

パッチ

現在、問題(LPS-34419)があり、これは パーマに対応しています。 ゲン スペース JRubyによるメモリリーク。 この問題を解決するには、チケットを作成してください。

CSSを使ったフック

CSSをフックで使用すると、JRubyがトリガーとなってメモリの充填を開始する可能性が高い。 そのため、メモリ消費を抑えるために、コアとなるCSSファイルのオーバーライドを可能な限りフックで制限し、代わりに でテーマを通してCSSを適用します。

コンテキスト.xml

context.xmlによって引き起こされるメモリ問題の可能性を減らすためには、すでに配備されているポートレットの context.xml ファイルのすべてから 属性 antiResourceLocking="true" を削除してください。

context.xmlファイルを手動で変更していない場合は、単純にcontext.xmlファイル全体を削除することができます。 context.xmlファイルは、 /webapps/.../META-INF/context.xml にあります。

Liferay Portal の一部のバージョンで、デプロイ時に各ポートレットの context.xml ファイルがオーバーライドされる問題 (LPS-29750) があります。 したがって、各ポートレットのcontext.xmlファイルの内容が変更されている可能性があり、メモリの問題を引き起こしている可能性があるので、内容を確認することが重要です。

ポートレットの.sassキャッシュを構築する

ポートレットを作成する際には、'build-css' ant タスクを必ず実行してください。 これは .sass-cache ファイルのビルドを行うので、ポータルは実行時にそれを行う必要はありません。 構築したら、ポートレットをすべてのノードに再配置します。

ポートレット自体がSASSを使用していない場合でも、build-cssタスクを実行することをお勧めします。 少なくとも、ポートレットの css フォルダに空の .sass-cache フォルダを手動で作成してください。

Liferay Portal を実行しているユーザーが、ファイルシステムにファイルを作成する権限を持っているかどうかを確認します。

Liferayを実行しているユーザーが .sass-cache フォルダやその中のファイルを作成するために必要な権限を持っていないために問題が発生することがあります。 このユーザーがフォルダへの書き込み権限を持っていることを確認してください。

添付のGroovyスクリプトを実行する

ポータルがコンパイルされたCSSファイルに手を伸ばすと、まず、CSSファイルとコンパイルされたCSSのタイムスタンプが同じであるかどうかを確認します。 タイムスタンプが同じでない場合、ポータルはその場でCSSを再コンパイルします。 これは、特にタイムスタンプが不一致のファイルがたくさんある場合に、メモリの問題を引き起こす可能性があります。

添付のgroovyスクリプトを実行すると、タイムスタンプが一致するように更新することで、これらの問題のいくつかが解決します。 さらに、処理されたファイルや使用されたすべてのプロパティをプリントアウトすることができます。 スクリプトは以下の場所に出力ファイルを作成します。 "java.io.tmpdir"/liferay/lsasscachedebug.txt .

このスクリプトを実行することには副作用があることに注意してください: カスタム CSS をフックに含めている場合、キャッシュが無効になるとすぐに失われます。

クラスタ環境の場合は、すべてのノードに対してスクリプトを実行するようにしてください。

did-this-article-resolve-your-issue

legacy-knowledge-base