問題
- Liferayの起動に非常に時間がかかり、以下のようなHeap Spaceエラーを投げます:
ERROR [Framework Event Dispatcher: Equinox Container: d97119a4-f960-4e1c-839b-88c78fbc6cc6][Framework:93] FrameworkEvent ERROR java.lang.OutOfMemoryError: Java heap space at java.base/java.util.Arrays.copyOf(Arrays.java:3745) at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172) at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:686) at java.base/java.lang.StringBuilder.append(StringBuilder.java:232) at org.hibernate.type.StringClobType.nullSafeGet(StringClobType.java:69) at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:109) at org.hibernate.type.AbstractType.hydrate(AbstractType.java:104) at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283) at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527) at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455) at org.hibernate.loader.Loader.getRow(Loader.java:1355) at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611) at org.hibernate.loader.Loader.doQuery(Loader.java:829) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) at org.hibernate.loader.Loader.doList(Loader.java:2542) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) at org.hibernate.loader.Loader.list(Loader.java:2271) at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:940) at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) at com.liferay.portal.dao.orm.hibernate.QueryImpl.list(QueryImpl.java:112) at com.liferay.portal.dao.orm.hibernate.QueryImpl.list(QueryImpl.java:104) at com.liferay.portal.kernel.dao.orm.QueryUtil.list(QueryUtil.java:61) at com.liferay.portal.kernel.dao.orm.QueryUtil.list(QueryUtil.java:53) at com.liferay.fragment.service.persistence.impl.FragmentEntryLinkPersistenceImpl.findByRendererKey(FragmentEntryLinkPersistenceImpl.java:2670) at com.liferay.fragment.service.persistence.impl.FragmentEntryLinkPersistenceImpl.findByRendererKey(FragmentEntryLinkPersistenceImpl.java:2560) at com.liferay.fragment.service.persistence.impl.FragmentEntryLinkPersistenceImpl.findByRendererKey(FragmentEntryLinkPersistenceImpl.java:2519) at com.liferay.fragment.service.impl.FragmentEntryLinkLocalServiceImpl.getFragmentEntryLinks(FragmentEntryLinkLocalServiceImpl.java:385) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- Liferay全体のコンテンツページには、数万個の大きなフラグメント が存在します。
Environment
- DXP 7.2
- DXP 7.3
- DXP 7.4
解決策
- この問題は、 LPS-177286によって解決されます。
- ヘルプセンターのチケットで、 LPS-168582, LPS-177987, LPS-178527を含むパッチレベルのHotfixをリクエストします。
- Hotfix のインストールが完了したら、 osgi/configs フォルダに com.liferay.fragment.configuration.FragmentServiceConfiguration.config という名前のファイルを作成し、以下の内容を記述します:
propagateContributedFragmentChanges=B"false"
追加情報
- 起動時に、あるフラグメントエントリーに属するすべてのフラグメントエントリーリンクをメモリに取り込み、それを反復して更新ロジックを実行することで、すべてのフラグメントエントリーリンクを更新する手順があります。
- しかし、 、すべてのフラグメントリンクを一度にメモリにフェッチするため、多くの詳細なコンテンツページを持つ大規模なポータルインスタンスでは、このロジックはうまくスケールしない。
- LPS-177286 管理者が スタートアップで Contributed Fragment の変更の伝搬を有効/無効にできるようにする
会員限定記事
Liferay エンタープライズ サブスクリプションをお持ちのお客様は1500件を超えるベストプラクティス、トラブルシューティング、その他のソリューション記事を閲覧できます。ログインすると、記事全体をお読みいただけます。
ログイン