升级Liferay 6.1到6.2 GA4,DMS升级时间长

Upgrade Liferay 6.1 to 6.2 GA4, DMS taking much time to upgrade

我正在尝试将我的实时门户从 LR6.1 升级到 LR6.2 CE-GA4。一切都很好,除了 Liferay 升级 DMS 需要 30 多个小时,

在 6.1 中,我的 DMS 已经打开 dl.store.impl=com.liferay.portlet.documentlibrary.store.AdvancedFileSystemStore

大小为 29 GB

是的,它给出了一些未找到特定文件的异常,但最终进行了升级。痛点是升级DMS所需的时间。由于门户网站是实时的,客户不能等太久才能升级。请提出解决方法/解决方案。

提前致谢

您必须确定问题的根本原因 - 您提到 DMS 中有 29G 数据,但这可能与此无关:监控升级过​​程以查看它实际在做什么以及在哪里瓶颈是:它是一个缓慢的 NAS,它只会将数据滴到 Liferay 吗?当门户运行其升级例程时,CPU 是否达到最大值?您的数据库可以处理元数据的更新吗?是否有需要但在更新期间无法获取的外部资源? (例如 DTD 文档、预览中包含的外部图像)

进一步:虽然它可能是 DMS,但它也可能是完全不同的东西。

另一个可能值得的测试(如果 运行 长的 DMS)是暂时将文档库迁移到另一个存储,执行升级并迁移回去。如果运行速度明显加快,你会过得更好,甚至可能无需修复根本原因。

对我来说听起来像是一项常规的性能调整工作,只是这次是一次性操作。性能调优算法为:

  1. 确定瓶颈 #1(测量!)
  2. 修复它

现在瓶颈 #2 升级到新的瓶颈 #1 - 冲洗并重复直到性能令人满意。永远不要没有测量步骤,因为您可能会从瓶颈 #3 开始,投入大量工作,只能获得 5% 的性能,而不是从 #1

获得的 50%

检查是否有任何文件丢失(升级日志会报告),如果有,我已经编写了以下方法来先删除那些悬空文件,然后开始升级过程。

  public void cleanDMS(){
    List <DLFileEntry> fileEntries = null;
    fileEntryId = 0L;
    try {
        fileEntries = DLFileEntryLocalServiceUtil.getDLFileEntries(0, DLFileEntryLocalServiceUtil.getDLFileEntriesCount());
        System.out.println("Total file entries in system   "+ fileEntries.size());
        for (DLFileEntry dlFileEntry : fileEntries) {

            getFileAsStream(dlFileEntry.getUserId(), dlFileEntry.getFileEntryId(), dlFileEntry.getVersion());
            //System.out.println("Legal File found ");
        }
        System.out.println("###################################################################################################################");
        System.out.println("total dangling entries found  and deleted are "+ entries.size());
        System.out.println("###################################################################################################################");

    } catch (SystemException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
}

public void getFileAsStream(long userId, long fileEntryIdsss, String version){
    try {
        fileEntryId = fileEntryIdsss;
        DLFileEntryLocalServiceUtil.getFileAsStream( userId, fileEntryIdsss, version);

    }catch (NoSuchFileException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            try {
                //DLFileEntryLocalServiceUtil.deleteDLFileEntry(fileEntryId);
                DLAppLocalServiceUtil.deleteFileEntry(fileEntryId);
            } catch (PortalException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (SystemException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            System.out.println("No such file Exception caught for this ");
            entries.add(fileEntryId);
    } catch (PortalException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SystemException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}