在我的工作中,我们使用 Weblogic Server 来托管企业门户。这很好。
然而,我最近有机会在一些副项目中使用 Tomcat,我对速度上令人难以置信的差异感到震惊。Tomcat 启动需要 3-5 秒,部署一个中型项目需要 10-15 秒。Webblogic 启动需要 3-5分钟,部署最多需要 10分钟。这会扼杀任何迭代开发。
我是否将不得不接受它的缓慢和臃肿,或者我能做些什么来加快它的速度?有人有这方面的经验吗?
在我的工作中,我们使用 Weblogic Server 来托管企业门户。这很好。
然而,我最近有机会在一些副项目中使用 Tomcat,我对速度上令人难以置信的差异感到震惊。Tomcat 启动需要 3-5 秒,部署一个中型项目需要 10-15 秒。Webblogic 启动需要 3-5分钟,部署最多需要 10分钟。这会扼杀任何迭代开发。
我是否将不得不接受它的缓慢和臃肿,或者我能做些什么来加快它的速度?有人有这方面的经验吗?
您将无法将青蛙变成公主。我对 weblogic 的那些启动时间有点好奇——它们似乎有点过分,你不是在 linux 上运行吗?
如果您正在运行嵌套存档(耳朵内的战争等)以及目录扫描技术(hibernate、spring 等),您可以尝试在部署之前将其全部解压到相应的分解结构;众所周知,它会有所帮助。
Tomcat 包含 weblogic 的一小部分功能。我们在 jetty 上开发,但在 weblogic 上部署以用于验收/生产环境,并且效果很好。你可以用tomcat做同样的事情。
Tomcat 是一个相当严格的容器,而 weblogic 是宽松的,所以通常你在部署到 weblogic 时只会遇到一些小麻烦,特别是只要你不断地做这两个。
您还可以使用javarebel 之类的工具来进行非常漂亮的热部署并避免所有这些重新启动。
正如 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/
您没有提到什么级别和什么平台,但WebLogic Server 性能和调优指南包含许多可能对您有所帮助的提示和技巧。
如果 WebLogic 连接到数据库并且您没有正确设置 DNS,它在 Linux 上的启动也会很慢。
根据您的设置,您可能能够编辑 /etc/resolv.conf 并注释掉 nameserver 行。这可以将 WebLogic 的启动时间从 20 分钟减少到不到一分钟。
关于内存消耗问题,您可能想尝试设置 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)在java参数中添加“-Djava.security.egd=file:/dev/./urandom”(/dev/urandom不起作用)。
更糟糕但可行的解决方案是: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 服务器需要几秒钟。
如果您使用Weblogic Workshop,那么您只需要发布,而不是在进行迭代开发时重新启动应用程序服务器。
正如 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 秒。
请检查冗长的启动时间实际上是由于 WebLogic Server 启动而不是 WebLogic Portal 启动时间造成的。