如何减少 Hybris 服务器的启动时间?

Posted

技术标签:

【中文标题】如何减少 Hybris 服务器的启动时间?【英文标题】:How could I reduce the Hybris server startup time? 【发布时间】:2016-05-19 06:53:01 【问题描述】:

我正在处理一个 Hybris 项目等待 350 - 550 秒 等待单个 Hybris 服务器启动 非常耗时,即使只是代码中的一点修改/错误类型。是否可以通过仅运行我修改过的那些扩展或任何其他方式来减少时间?那将是一件很棒的事情。

【问题讨论】:

【参考方案1】:

+1 在 JRebel 上。它适用于 hybris。当然,它很昂贵,但您会迅速获得 ROI 节省。初始加载速度较慢,但​​一旦加载起来会节省大量时间。

要做的另一件事是查看您的 localextensions.xml 并确保其中只有您项目所需的扩展。这对启动时间有很大影响。

我还看到,在运行平台时,通过使用 HSQL 以外的数据库可以合理地缩短启动时间。我在本地使用 mysql

另一件事是确保您正在使用的机器中有足够的咕噜声。我刚刚在这里启动了这个平台,即使 JRebel 运行它也“只”需要 200 秒。我建议考虑使用四核 CPU 和 SSD,以缩短本地开发时间。

【讨论】:

你曾经在 Hybris 项目中使用过 JRebel 和 IntelliJ 吗?如果是这样,你能帮我设置一下吗? JRebel 很棒,但太贵了,除非您的公司为您购买许可证。我从来没有能够成功地使用 hybris 的开源替代方案。 我是 Eclipse 人。不过,将 hybris 与 JRebel 一起使用非常简单 - 这里有说明 wiki.hybris.com/display/release5/How+to+Use+JRebel 唯一不同的是 IntelliJ 与 Eclipse 中的扩展配置。 但是当你需要在系统中添加一个新类型时你会怎么做。即使您有 JRebel,您也需要停止服务器,执行构建并重新启动服务器。为了避免这种情况,您可以使用以下youtube.com/watch?v=NHtMg8vZfdI&feature=youtu.be【参考方案2】:

您将在本文中找到将服务器启动时间加快 50% 的所有说明

    禁用 Cronjobs 删除未使用的租户 修改tomcat startStopThreads 从扫描中排除某些罐子

https://hybrismart.com/2016/12/27/speed-up-server-start-time/

【讨论】:

禁用 Cronjobs => 禁用 Cronjobs 触发器。你能把第三点(修改tomcat startStopThreads)更清楚吗? 您好@MohamedNabli,感谢您的提问:) 请看这张照片:packtpub.com/sites/default/files/Article-Images/… 在 bref 中,tomcat server.xml 是定义一个引擎的配置文件,“Engine 元素代表整个请求处理机制", startStopThreads 是此引擎将用于并行启动子主机元素的线程数,因此如果将此值设置为 0 ,您的服务器将使用 1 个线程启动,因此服务器将快速启动...【参考方案3】:

我会推荐使用Jrebel - 它就像 Hybris 的魅力一样,并在运行时重新部署 bean。主要优点是它能够在不重新部署的情况下重新配置 Spring bean,因此它确实节省了服务器重启的时间。

有一些开源替代品,但它们不适合我,尽管值得一看:DCEVM 和 fakereplace

【讨论】:

你曾经在 Hybris 项目中使用过 JRebel 和 IntelliJ 吗?如果是这样,您能帮我设置一下吗?【参考方案4】:

尝试使用 Linux (Ubuntu) 而不是 Windows。性能差异是惊人的。这就像构建时间的 1/4 和服务器启动时间的 1/2。我希望我早点弄清楚!

【讨论】:

【参考方案5】:

我看到很多 cmets 因为人们无法设置任何开源替代 Jrebels。

Hybris 服务器启动时间无法大幅减少,尤其是在 Windows 上,它需要大约 20 到 30 分钟(如果您还使用标准扩展构建了一些自定义扩展)。

唯一好的解决方案是使用 JRebels,但 JRebel 的缺点是它太贵了。 JRebel 的良好替代品是 DCEVM + HotSwap。 Here are the Steps to setup HotSwap.

JRebel 或 HotSwap 究竟做了什么? 它在实时运行的服务器中加载代码更改。您无需为每次代码更改重新启动服务器。

如果您在设置时遇到任何问题,请告诉我。

【讨论】:

【参考方案6】:

我建议禁用一些您在开发过程中使用的繁重扩展,并仅启用您正在使用的这个扩展以及必要的扩展。我不知道您使用的是哪个 hybris 版本,但据我所知,会有一些功能可以在平台的后续版本中解决您的问题,但我对此不是 100% 确定的。

【讨论】:

【参考方案7】:

感谢所有写答案的人! :) 实际上,我为自己的问题找到了一个非常好的解决方案:

我修改了platform/tomcat/conf文件夹中的context.xml,使其可重新加载并查看WEB-INF文件夹 我使用 IntelliJ 来做开发工作,它有一个编译选项,比如单个 java 文件或整个包/模块/扩展。所以我修改了WEB-INF/classes的编译路径,仅此而已。

现在,如果我启动一个 hybris 服务器并在我的项目中修改(或创建)一个文件,我只需在修改后的包或单个当前文件上运行编译,几秒钟后 Tomcat 将修改后的内容重新加载到当前的扩展。

更新:由于 Hybris 扩展无法使用其他扩展的“webapp”部分,因此似乎无法重新加载任何依赖项。 所以我的解决方案只适用于“仅限 webapp”扩展。

【讨论】:

【参考方案8】:

您还想查看https://wiki.hybris.com/display/partnerblog/2013/09/23/Avoid+restarting+the+server+as+much+as+possible。虽然这不是您问题的直接答案,但它说明了如何避免服务器重启。

【讨论】:

【参考方案9】:

请在 local.properties 文件中使用此属性

#Performance mode
build.development.mode=false
tomcat.development.mode=false
storefront.granule.enabled=true
addonfilter.active=false

【讨论】:

我相信这行得通,但如果你能解释一下所有这些选项的作用以及它们为什么有用,那就太好了。【参考方案10】:

尝试在 localextension.xml 中仅放置所需的扩展名。 您可以通过 local.properties 文件禁用 Solr 服务器来阻止它自动启动。 如果您在 intel-i3/AMD 处理器上运行 hybris 服务器,请升级到至少 8 GB RAM 的 intel-i5。

【讨论】:

【参考方案11】:

所以从过去一年开始,我一直在使用 JRebel 和 Hybris。

虽然我无法使用我的 IDE 进行配置(我相信有一个简单的方法),但使用起来非常简单。

在我修改了任何 java 文件或 spring 配置之后,在与我运行服务器的终端不同的终端中,我导航到我修改了文件的扩展,然后执行ant build。修改后的文件被正在运行的服务器拾取(您可以在服务器控制台中看到正在拾取的新文件/配置)。

关于许可证,我使用来自https://my.jrebel.com/ 的 myJRebel 许可证,需要登录社交媒体才能获得许可证密钥。

设置步骤 -

    下载 JRebel 库(独立 zip) 解压到您的首选位置。我的是 C:\Monil\Tools\jrebel

    将以下内容添加到您的 local.properties(相应修改)

    tomcat.debugjavaoptions=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n -Xverify:none -agentpath:c:/Monil/Tools/jrebel/lib/jrebel64.dll -Xbootclasspath/p:$HYBRIS_TEMP_DIR/hybris/rebelboot.jar

请注意,当您执行 ant all 并启动服务器时,$HYBRIS_TEMP_DIR/hybris/rebelboot.jar jar 将直接自动添加到 hybris temp。

【讨论】:

【参考方案12】:

除了使用 JRebel 减少重新启动的次数(如前面的答案中提到的那样)之外,您正在使用的操作系统很重要。 如果您使用的是 windows 计算机,我强烈建议您使用 unix 系统。所以在我看来,你有以下选择:

您可以使用虚拟机(不推荐,因为虚拟机不如原生 unix 快) 利用 Windows 中的 WSL2 集成并在那里进行开发。 https://docs.microsoft.com/en-us/windows/wsl/install-win10 或者至少使用同样使用 WSL2 方法的 Docker。

如果你不熟悉 Docker(这需要一点学习),不如试试 Windows 上的 WSL2。

与普通的 Windows 方法相比,我可以将构建和启动时间加快接近 3 倍。

希望这将帮助您加快工作速度:-)

【讨论】:

以上是关于如何减少 Hybris 服务器的启动时间?的主要内容,如果未能解决你的问题,请参考以下文章

在hybris tomcat中部署war文件

MacOS Monterey 和 SAP Commerce / Hybris 1905:无法启动 hybrisserver.sh

Jrebel简单的热部署一个web工程

Hybris:找不到与当前 URL 关联的 CMSSite

如何仅在 Hybris 项目中运行单元测试?

如何减少嵌入式 android 操作系统的启动时间。?