加速Weblogic服务器启动时间

25

在我的工作中,我们使用Weblogic服务器来托管企业门户。这还可以。

然而,最近我有机会在一些副项目中使用Tomcat,并且我对于速度上的巨大差异感到震惊。Tomcat需要3-5秒才能启动,并且需要10-15秒来部署一个中等大小的项目。而Weblogic需要3-5分钟才能启动,并且需要长达10分钟的时间来部署。这使得任何迭代开发都很困难。

我是否必须接受它缓慢和臃肿的现实,或者有什么办法可以加快它的速度?有没有人有这方面的经验?


3-5分钟,!?太悲伤了。 - rbp
8个回答

19
你将无法将青蛙变成公主。我对Weblogic的启动时间有些怀疑-它们似乎过长,你不会碰巧在Linux上运行吗?
如果你正在运行嵌套存档(war文件中包含ear文件等)并且还使用了目录扫描技术(如Hibernate、Spring等),则可以在部署之前将所有内容解压为相应的展开结构;这已被证明有所帮助。
Tomcat包含Weblogic拥有的非常少量功能。我们在Jetty上进行开发,但在接受/生产环境中部署在Weblogic上,这个方法效果很好。你也可以用Tomcat实现同样的效果。
Tomcat是一个相当严格的容器,而Weblogic则比较宽松,因此在部署到Weblogic时通常只会遇到一些小问题,尤其是在持续进行两者部署的情况下。
你还可以使用像javarebel这样的工具进行非常棒的热部署,避免所有这些重启。

有趣,我一定会研究javarebel。不幸的是,我无法在Tomcat或Jetty上进行开发部署...我们正在运行Weblogic Portal,它非常依赖BEA生态系统的其他部分,如果没有这些部分就会出现问题。 - levand
你是否在Linux上运行Weblogic?Linux上的随机数生成存在非常模糊的问题,导致Weblogic启动时间非常缓慢。如果是这种情况,我可以找到解决方案。 - krosenvold

7
如krosenvold所说,随机数生成可能导致启动缓慢。
Oracle的建议是在以下-D标记中选择一个,只用于非生产系统,因为它会降低安全性。
-Djava.security.egd=file:///dev/urandom开关或file:/dev/./urandom添加到启动weblogic的命令中。
上述信息摘自http://download.oracle.com/docs/cd/E12839_01/doc.1111/e14772/weblogic_server_issues.htm#CIHIIBGJ 如果-D标记不起作用,请查看下面的解决方案:http://www.itonguard.com/20090313/weblogic-starts-slow/

4

3

如果WebLogic连接到数据库,而您没有正确设置DNS,则在Linux上启动速度也可能很慢。

根据您的设置,您可以编辑 /etc/resolv.conf 文件并注释掉 nameserver 行。这可以将 WebLogic 的启动时间从 20 分钟减少到不到一分钟。


这是一个很好的答案,正好解决了我在数据库连接方面遇到的问题。它尝试连接数据库,在多次尝试后,如果超时就会最终启动。 所以感谢@Max。 - java dev

2
关于内存消耗问题,您可以尝试设置WebLogic服务器使用的JVM的内存参数。登录WL Web管理控制台并转到Environment/Servers/[your server]/Configuration/Server Start,在"Arguments"上设置-Xms256m -Xmx256m之类的内容将使您的JVM的初始(Xms)和最大(Xmx)堆大小为256兆字节。您需要尝试不同的数字并找到适合您环境的最佳值。但请注意,您的Eclipse实例可能也会消耗大量内存。
关于启动时间,虽然比我预期的要长一些,但它们似乎还好。这个问题非常普遍,我认为您不可能彻底解决它。WebLogic比Tomcat具有更多的功能,这反映在环境的其他特征上(如启动时间)。
原来Weblogic在启动过程中使用随机数生成器。由于Java中的一个错误,它从/dev/random读取“随机性”。/dev/random是非常好的随机数生成器,但它非常慢。有时需要10分钟或更长时间才能生成一个数字。/dev/urandom不是那么好,但它是瞬间的。Java以某种方式将/dev/urandom文件映射到/dev/random。这就是为什么$JAVA_HOME/jre/lib/security/java.security中的默认设置是无用的。
可能的解决方案: 1)将“-Djava.security.egd=file:/dev/./urandom”(/dev/urandom不起作用)添加到Java参数中。
更糟糕但可行的解决方案是: 2)mv /dev/random /dev/random.ORIG; ln /dev/urandom /dev/random
3)最好的解决方案是更改$JAVA_HOME/jre/lib/security/java.security 将securerandom.source替换为 securerandom.source=file:/dev/./urandom
此问题在Windows下不会发生,因为它使用了/dev/random的不同实现。
现在启动weblogic服务器只需要几秒钟。

1
如果您使用Weblogic Workshop,则在进行迭代开发时,只需要发布而不需要重新启动应用程序服务器。

0

正如Tomas F和krosenvold所建议的那样,这可能是由于随机数生成器。

在Weblogic 12.2.1的标准启动中,我收到了以下消息:

Disabling the CryptoJ JCE Provider self-integrity check for better startup performance. 
To enable this check, specify -Dweblogic.security.allowCryptoJDefaultJCEVerification=true

所以我进行了指定,这将启动时间减少了一半。在一个干净的域名上大约需要13秒。

有一个很棒的代码示例,你可以在普通的Java中自己尝试一下。

public class JavaSecurityEgdTester {
    public static final double NANOSECS = 1000000000.0;

    public static void main(String[] args) {
        SecureRandom secureRandom = new SecureRandom();
        long start = System.nanoTime();
        byte[] randomBytes = new byte[256];
        secureRandom.nextBytes(randomBytes);
        double duration = (System.nanoTime() - start) / NANOSECS;

        System.out.println("java.security.egd = " + System.getProperty("java.security.egd") + " took " + duration + " seconds and used the " + secureRandom.getAlgorithm() + " algorithm");
    }
}

运行

java -Djava.security.egd=file:/dev/random -cp JavaSecurityEgdTester

对比

java -Djava.security.egd=file:/dev/urandom -cp . JavaSecurityEgdTester

禁用它可以提高性能,对吧?为什么启用它会减少时间!! - Jason

0
请检查漫长的启动时间是否真的是由于WebLogic Server的启动而不是WebLogic Portal的启动时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接