BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

问卷结果:JavaEE容器重部署和重启时间

| 作者 张凯峰 关注 1 他的粉丝 发布于 2009年9月28日. 估计阅读时间: 5 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

近日,Jevgeni Kabanov公布了一份几个月前做的关于JavaEE开发、容器和部署时间的调查结果。结果显示有超过1100人参加了这次问卷调查。这里是下载版的问卷结果。而下面是Jevgeni作出的针对每个问题答案分析的摘要。

问卷的第一个问题是:“你在目前参与的最大型项目中使用的是什么容器?”

图表1:哪个容器是最常使用的?

这里没有包括那些得分不到10分的容器。毫无悬念,Apache的Tomcat占据了头把交椅,而JBoss紧随其后。开源的服务器占到了70%的比例。虽然不能把这样的比例直接等同于容器们的市场份额,但这样的结果跟SD Time作出的研究结果有异曲同工之妙,在他们的调查中允许人们选择多个容器。

第二个问题是:“重启你的容器并重新部署应用要花费多少时间?”

图表2: “重启你的容器并重新部署应用要花费多少时间”(横轴是分钟)

这样,计算出平均时间在2.5分钟左右,这跟事先评估的大概1分钟相去甚远。

第三个问题:“编码一个小时,你会重新部署几次?”

图表 3:“编码一个小时,你会重新部署几次?

对于那些回答“我不需要重新部署”的人,我们询问了他们是如何做到的,答案有以下这些:

  • “我不负责重新部署”
  • “我们在嵌入式jetty&activemq&atomikos以debug模式开发,而不是OracleAS上。这样,我们虽然需要重新部署并重启jetty,但不需要对OAS也这么做”
  • “我还处在项目的早期阶段,大部分时间都花在了编码和测试,而不是重新部署上——通常每个小时我会重新部署3-4次”
  • “我们使用JavaRebel,而它真是太棒了!”

接着,我们做了一下数据处理。用一个数字代表次数间隔(比如3.5次代表3-4次),并把每小时的部署次数与一次重新部署所费时间相乘(基本上就是图2和图3相乘),这样就得出了在开发过程中每小时会花费的重新部署时间:

图表4:“ Java开发者在一个小时编码过程中,花费多长时间来重新部署(原始数据)?”

平均时间是12分半,占到了整个开发时间的20%还多点。然而,标准差超过14,这意味着真实的比例变化很大。我们想要显示出更加精确的数据,在分析过参与调查的人们在每个答案上的选择所产生的比例数据后,我们得到了更新后的图表:

图表5:“ Java开发者在一个小时编码过程中,花费多长时间来重新部署?(更加精确的数据)”

这样,平均时间就是10.5分钟,标准差是8,这样的数据更令人信服。这个时间占据了全部开发时间的17.5%,这远比我们预期的要高。这些干净的数据也将用作接下来的分析。

接着,我们基于每个容器进行了数据分析。下面是我们所发现的:

图表6:每个容器要花费多少时间来重新部署?

可以看到,Jetty最快仅需要5.8分钟,而IBM的WebSphere排在了末尾,时间几乎是Jetty的两倍还多。但需要注意的是,虽然Jetty启动时间要比WebSphere要看,但最大的不同很可能是因为部署的应用规模和其中使用到的技术。

接下来,我们拥有了几乎一模一样的图表,但数字显示的是开发时间的一个比例。

图表7:每个容器中,花在重新部署上的开发时间比例是多大?

下面这张图,显示了按40小时每周的时间算,每年要消耗在重新部署上的周数对比。

图表8:每年有多少个40小时周被花费在了重新部署阶段上?

这个数据的平均值是每年5个工作周多一点,但标准差4使得3-7的范围更加可信。

最后一张图表显示了每个容器上所费重新部署时间更加详尽的比例。我们期望这样能显示出使用不同容易的项目规模,从而能让读者大概弄清楚自己的项目会花费多少时间在重新部署上。

图表9:: Java EE容器市场渗透率

我们会这样诠释这幅图表:

  • Jetty只会用在重新部署迅速的项目上。这点毫无疑问,因为Jetty不支持重新部署,只是有极快的重新启动时间。
  • Apache Tomcat和GlassFish可以用在相同类型的项目上。两者都是全功能且轻量级的容器。
  • JBoss、Oracle Weblogic和IBM WebSphere争夺同样的市场定位和份额。它们的项目一般都是大而复杂。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

能不能不重启?? by wang egmkang

难道Java的利器就是重启??
我每天都要等Java程序员重启容器很长时间,如果Java天生具有这种特性,还不如不用.

Re: 能不能不重启?? by gz husthxd

目前正在头痛这个问题。

确实如此 by chu easin

作为Java程序员,大都是做WEB开发,天天在编码中花费在容器重部署和重启时间占了很多,时间是宝贵的,特别是现在倡导敏捷快速的时代,希望这样的情况以后能有所改善。

有意思的统计 by 果 林

当项目发展到重启一次Web容器要消耗5分钟的时候, 那就已经很难接受了。同时在等待Web容器启动的过程中,被大量消耗的硬件资源, 使得人力和硬件都处于等待的空闲过程中,确实浪费了大量的生产力.

如果能灵活、快捷的去掉本次开发所不依赖的模块,那么启动速度会改善很多.

当然,更有效的肯定是从控制代码、项目的规模入手 才是易于未来维护的根本。完全寄托于WebContainer自身的提速,肯定是不靠谱的。

单元测试 by Lee Vincent

如果单元测试做的足够的话,直到最后做功能测试才需要去启动服务器。

Re: 单元测试 by wang egmkang

可是某些程序员说代码"被单元测试"了,问题一大堆,没事干重启.
为啥IIS就不要重启,我很费解,谁出来说说??

Re: 单元测试 by Zou Haibin

java容器启动要加载很多框架
在不使用其它框架的前提下,启动好像也只需要几秒钟。。

这个统计有点奇怪 by lou yun

我接触到的大部分团队,开发、生产使用的容器是不一样的。通常开发使用tomcat,生产使用WebSphere或者WebLogic。
如果像这个一样放在一起统计,显然是不合适的。

另外我觉得如果出现频繁部署的情况,说明系统设计不够合理,开发过程控制也比较差。

不看这个统计,还真不知道自己浪费这么多时间。 by 刘 志

统计还是有意义的。
即使测试驱动开发,也很难保证全部按照安排来一步步走。
尤其现在经济不好,公司必须利益最大化,省略掉其他的必要步骤,测试完全被抛除在绩效之外,完全以实现功能为主。
项目周期也被压缩到原来1/3来完成,疲于奔命的我们,为了完成任务而编码,很多修改都是临时产生的。
容器的重启就成了家常便饭,也就成了一个巨大的痛苦。

大家给点儿好建议 by yang ray

分析的不错,有什么好的建议呢?jsp修改不重启,class修改重新载入,配置文件修改才重启。

Re: 不看这个统计,还真不知道自己浪费这么多时间。 by Lee Vincent

看不懂!
“尤其现在经济不好,公司必须利益最大化,省略掉其他的必要步骤,测试完全被抛除在绩效之外,完全以实现功能为主。”
因为经济不好,所以要采取更低效、更浪费成本的工作方法?

Re: 能不能不重启?? by wang feng

那请你不要用了。。。
反正一看就不懂啥技术。。特性的。。

Re: 不看这个统计,还真不知道自己浪费这么多时间。 by 刘 志

批评的是,这个是管理层决定,不是由我们来定的。唉,有苦难言啊!

JavaRebel宣传贴,鉴定完毕 by 童 凡

rt

Java程序员开发Web应用的其他选择 by Dino Denver

其实现在还有很多其他选择来帮助Java程序员开发Web应用。比如 ProjectZero

www.ibm.com/developerworks/cn/web20/zero/

www.projectzero.org/

与J2EE服务器完全不同的设计理念,应用即服务器,重新启动只需要很短的时间。

这就是为什么多数网站用 PHP 而不用 Java 的原因 by .oO tipfoo

曾用 Java 基于 Opencms 搞过一个网站,那效率真是无法忍受,每次改动源码后等待生效的时间都比PHP、Python的时间长得多,要是重启 Tomcat5.5 都要等十来秒!现在改用 Python/Django 赚生计了,嘿嘿!

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

16 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT