InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

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

作者 张凯峰 发布于 2009年9月27日

领域
架构 & 设计,
运维 & 基础架构,
语言 & 开发
主题
编程 ,
应用服务器 ,
Java
标签
Jetty ,
JBoss ,
Websphere ,
Apache Tomcat ,
WebLogic

近日,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中文站编辑,有多年软件开发和测试经验,热衷参与技术社区与技术传播。

能不能不重启?? 发表人 wang egmkang 发表于
Re: 能不能不重启?? 发表人 gz husthxd 发表于
Re: 能不能不重启?? 发表人 wang feng 发表于
确实如此 发表人 chu easin 发表于
有意思的统计 发表人 果 林 发表于
单元测试 发表人 Lee Vincent 发表于
Re: 单元测试 发表人 wang egmkang 发表于
Re: 单元测试 发表人 Zou Haibin 发表于
这个统计有点奇怪 发表人 yun lou 发表于
不看这个统计,还真不知道自己浪费这么多时间。 发表人 刘 志 发表于
Re: 不看这个统计,还真不知道自己浪费这么多时间。 发表人 Lee Vincent 发表于
Re: 不看这个统计,还真不知道自己浪费这么多时间。 发表人 刘 志 发表于
大家给点儿好建议 发表人 yang ray 发表于
JavaRebel宣传贴,鉴定完毕 发表人 童 凡 发表于
Java程序员开发Web应用的其他选择 发表人 Dino Denver 发表于
这就是为什么多数网站用 PHP 而不用 Java 的原因 发表人 .oO tipfoo 发表于
  1. 返回顶部

    能不能不重启??

    发表人 wang egmkang

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

  2. 返回顶部

    Re: 能不能不重启??

    发表人 gz husthxd

    目前正在头痛这个问题。

  3. 返回顶部

    确实如此

    发表人 chu easin

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

  4. 返回顶部

    有意思的统计

    发表人 果 林

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

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

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

  5. 返回顶部

    单元测试

    发表人 Lee Vincent

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

  6. 返回顶部

    Re: 单元测试

    发表人 wang egmkang

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

  7. 返回顶部

    Re: 单元测试

    发表人 Zou Haibin

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

  8. 返回顶部

    这个统计有点奇怪

    发表人 yun lou

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

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

  9. 返回顶部

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

    发表人 刘 志

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

  10. 返回顶部

    大家给点儿好建议

    发表人 yang ray

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

  11. 返回顶部

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

    发表人 Lee Vincent

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

  12. 返回顶部

    Re: 能不能不重启??

    发表人 wang feng

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

  13. 返回顶部

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

    发表人 刘 志

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

  14. 返回顶部

    JavaRebel宣传贴,鉴定完毕

    发表人 童 凡

    rt

  15. 返回顶部

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

    发表人 Dino Denver

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

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

    www.projectzero.org/

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

  16. 返回顶部

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

    发表人 .oO tipfoo

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

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。