Websphere应用服务器 - 开始任何快速的操作到底是什么?

时间:2009-07-24 14:52:12

标签: java performance java-ee websphere

我正在使用带有集成测试环境的Rational Application Developer v7.0。当我调试我的webapp时,调试模式下的服务器启动时间接近5-6分钟 - 足够的时间休息一下!

有时,我很生气,因为我开始诅咒IBM构建操作系统而不是app服务器!产生20多个流程和无用的服务,没有记录的配置来调整它,以更快的速度启动。

我相信有很多java开发人员会同意我的意见。我试图通过我的管理控制台禁用默认应用程序和一组服务,但这没有多大帮助。

我没有web服务,没有企业bean,没有队列,只是一个需要连接池的简单Web应用程序。你有没有做过一些事情来制作你的集成测试环境,在调试模式下快速启动并在那里消耗更少的RAM?

更新: 我尝试禁用一些服务(国际化,默认应用程序等......),现在WebSphere服务器变得越来越糟糕。它不仅不需要可怕的启动时间,它会不时地冻结长达2分钟。 :-(听起来,优化不是一件好事,总是!

8 个答案:

答案 0 :(得分:8)

调试服务器代码的最佳方法是使用远程调试。

首先,您需要将以下内容添加到服务器启动脚本中的JVM参数:

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

这将导致JVM侦听指定的端口,然后从IDE启动针对该端口的远程调试会话并进行调试,就像代码在同一进程中运行一样。

以这种方式工作会阻止您频繁地重新启动服务器,从而在Websphere的启动时间内解决您的问题。

如果服务器上的二进制文件和IDE中的源代码不同步,你会得到一些奇怪的结果,但总的来说这不是问题。

答案 1 :(得分:7)

主要原因之一是您拥有一个包含许多模块,类,清单,XML描述符的大型应用程序,以及Websphere应用程序服务器启动过程本身是单线程的事实(因此每个应用程序都可以启动如果它们具有相同的权重,则在单独的线程中)。另一个原因是Eclipse EMF和JST框架在启动和发布/部署期间非常I / O密集。

启动繁琐的另一个原因是在发布/部署期间将进行的注释扫描。可以以各种方式控制和修改该注释扫描。看看这个网站: http://wasdynacache.blogspot.se/2012/05/how-to-speed-up-annotation-processing.html

首先,检查并评估您的硬件,包括CPU,内存和HDD。您的处理器在启动期间长时间运行100%吗?如果是这样,处理器可能太弱。是否发生分页?那么你可能需要增加一些RAM。 Websphere / eclipse JST和EMF框架非常强大I / O,因此您应该考虑投资SSD光盘。您还应该确保计算机上的其他进程(病毒防护软件等)不会从Websphere Java进程中窃取硬件资源。

所以对于硬件: 1.处理器 - 一个相当快的处理器,因为发布和启动大多是单线程的,所以你不需要那么多的cpu核心 2.内存 - 您至少需要512Mb的物理RAM,这当然取决于您的应用程序的大小。 3.存储 - 我肯定会选择快速SSD,因为底层的eclipse框架是I / O密集型的。

以下是一些减少启动阶段占用空间的技巧。请在应用这些设置之前确保记录基线启动,以便您可以观察启动时的差异,即减少启动时间。

  1. JVM args:-Xverify:none -Xquickstart -Xnoclassgc -XX:+ UseNUMA -XtlhPrefetch -Xgcthreads4(我的机器上安装了4个虚拟处理器)
  2. 扩展堆大小以匹配应用程序的需求。
  3. 禁用应用程序的自动启动以减少发布时间。
  4. 禁用PMI和不必要的跟踪。
  5. 在启动期间对您的应用程序进行配置,并在发现任何问题时修复瓶颈。
  6. 可能获得性能的其他JVM参数:

    • com.ibm.cacheLocalHost =真
    • com.ibm.ws.classloader.zipFileCacheSize = 512
    • com.ibm.ws.classloader.resourceRequestCacheSize = 1024
    • com.ibm.ws.management.event.pull_notification_timeout = 20000
    • com.ibm.ws.amm.scan.context.filter.packages =真
    • org.eclipse.jst.j2ee.commonarchivecore.disableZip =真

    将使Websphere应用程序服务器立即停止的Jvm参数:

    • com.ibm.ejs.sm.server.quiesceTimeout = 0
    • com.ibm.ejs.sm.server.quiesceInactiveRequestTime = 1000

    Webcontainer属性:

    • com.ibm.wsspi.jsp.disableTldSearch =真
    • com.ibm.wsspi.jsp.disableResourceInjection =真

    可以指定的JVM参数eclipse.ini(注意堆参数是根据我的环境条件配置的)

    • -Dcom.ibm.ws.management.event.max_polling_interval = 5000
    • -Xquickstart
    • -Xverify:无
    • -Xmxcl25000
    • -Xjit:dataTotal = 65536
    • -Xcodecache64m
    • -Xscmx48m
    • -Xnolinenumbers
    • -Xverify:无
    • -Xmnx64m
    • -Xmx1446m
    • -Xmnx64m
    • -XX:+ UseCompressedOops
    • -XX:+ UseNUMA

答案 2 :(得分:6)

5到6分钟是不正常的。我每天都使用RAD和WAS,并获得不错的启动时间。你运行的是什么版本的WAS以及你有多少RAM?

如果您为同一WAS配置文件共享多个工作区和项目,请考虑为工作区创建新的WAS配置文件。

你可能已经尝试过,但这里有一个简单的清单,可以直接尝试。确保RAD中的服务器设置启用了以下选项:

  • 优化服务器以进行测试和开发
  • 使用工作区中的资源运行服务器
  • 最小化复制到服务器的应用程序文件

如果您不需要,请取消选中“启用通用测试客户端”。

在管理控制台中,您可以验证某些服务器设置,例如

  • 以开发模式运行
  • 并行启动
  • 根据需要启动组件

您还可以在创建新的WAS配置文件时卸载默认安装的ivt应用。然后通常的事情,如不太碎片的驱动器和正确设置的页面文件大小。

您可能已经知道的最后一件事,重新发布到您的服务器而不是重新启动它。

答案 3 :(得分:5)

这就是春天出生的原因之一。

你甚至不必提供像JMS,远程处理等所有的细节。你最好使用Tomcat,ActiveMQ和OpenEJB。

任何但是WebSphere。

答案 4 :(得分:4)

有一些提示和提示可以帮助调整RAD 6 on developerworks,其中许多也适用于RAD 7。

我已经看到RAD 7的类似列表,如果我能找到它,我会发布它。

我找到了一些tuning tips for Portal on RAD 7

我想说我对测试环境的经验不是最理想的。我现在倾向于使用为remote debugging with an External launch configuration配置的Tomcat / Pluto从裸Eclipse中管理它,并依赖于具有适当的JNDI配置来抽象底层服务器。

如果您正在编写相关的API,那么出于开发目的,您不应该在Websphere上进行编码。如果你确实有一个特定于Webpshere的问题,你总是可以调动它来调试它。

答案 5 :(得分:3)

如果您没有EJB,没有JMS等,只需在Tomcat或Jetty等独立的servlet容器下部署,您会惊讶地发现它有多快:-),这里具有讽刺意味但是这是真的!

答案 6 :(得分:1)

如果连接池确实是您使用的唯一appserver功能,那么为什么不简单地使用apache commons dbcp(http://commons.apache.org/dbcp/)完全删除webfear并使用jetty。这应该会将您的启动时间减少到大约5秒。如果您真的觉得有必要,可以稍后再次为生产环境轻松切换到websphere。

答案 7 :(得分:1)

WAS V7通过允许您配置应用服务器启动时启动的内容来解决其中一些问题。

因此,如果您迁移到WAS V7,您可能会在此空间中进行一些改进。