级别: 中级 Tyler Anderson (tyleranderson5@yahoo.com), 自由撰稿人, Stexar Corp.
2006 年 9 月 14 日 Apache Geronimo 以可伸缩性而闻名,它使用 GBeans,允许开发人员即插即用所需的任何服务与 Web 应用程序。但 Apache Geronimo 开箱即用的发行版配套提供了一些监听端口和启动的应用程序模块的服务,包括 Web 应用程序在内,这将占用大量资源,还有可能使您的应用程序暴露于入侵者的威胁之下。本文将介绍如何停止和重启监听和应用程序服务,以及如何按照需要取消部署和重新部署各个应用程序模块及 Web 应用程序,从而有效地将 Apache Geronimo 发行版的部署调整为仅包含必要的核心服务和应用程序。
简介
Apache Geronimo 每个版本的实用性都有所增加,预载入已有下载(stock download)中的应用程序和服务同样也随之增加。尽管其价值显而易见,但每一项增强功能同时也会使 Geronimo 的启动时间大大增加,使您在停止并重新启动 Geronimo 时不得不等待更长时间。或许您认为只要不使用那些服务,它们就不会对您的计算机产生影响,但事实并非如此。服务和应用程序实际上在运行、监听,等待 Geronimo 需要它们的时机,因此占据着宝贵的 CPU 时钟周期和内存中的晶体管。
 |
Geronimo 架构
Apache Geronimo 的架构基础包括 Geronimo JavaBeans™(即 GBeans)。GBeans 是 Geronimo 应用服务器所使用的自定义 JavaBean,部分 GBeans 包含一些组件,它们构成 Geronimo 的内核。GBeans 可为保持或非保持状态,Gbeans 之间彼此交互,有效地创建 Geronimo 内核。(如需了解 Apache Geronimo 的内核及 GBeans 架构的更多信息,请参见 参考资料 一节,其中提供了一些有用的链接。)
|
|
更快的启动速度和减少内存使用量并非创建自定义 Geronimo 发行版的惟一理由。举个例子,假如打算将 Geronimo 用做实时应用服务器,那么一定不希望任何不需要或用不到的 Web 应用程序或服务运行在 Geronimo 上。关闭不需要的服务将带来更安全的环境,其中可供潜在入侵者刺探的应用程序和服务更少。公开的服务越多,则潜在入侵者获取访问权限的 “入口” 也就越多。
本文向您展示如何停止不必要的应用程序和服务,以及如何在之后需要时重新启动它们。您将了解如何自定义已有的(stock) Apache Geronimo 发行版,目的是在引导并运行此发行版时,仅载入需要运行的那些 Web 应用程序和系统服务。最终 Geronimo 将运行在更为安全的配置与环境中,同时处理器和内存也将得到更有效的利用。
开始学习
首先,需要从 apache.org 下载最新版的 Apache Geronimo V1.0,将其解压到一个目录中 —— 下文将称之为 <geronimo-install-dir>。(下载链接请参见 参考资料 一节。)
Apache Geronimo 是用 Java™ 编程语言编写的,务必下载并安装 Sun 的 Java 运行时环境。由于 Geronio 是 Java 1.4 认证的,因此推荐 1.4.09 或更高版本(但应为低于 1.5 的版本)。
为确保正确安装所有必备软件,键入以下命令启动 Apache Geronimo 应用程序:
java -jar <geronimo-install-dir>/bin/server.jar
现在已为学习本文作好了一切准备。接下来,启动 Geronimo,查看已有安装 Geronimo 的初始统计数据。
常用 Geronimo 统计数据
首先查看一下 Apache Geronimo 的初始引导时间和内存消耗情况。图 1 展示了 apache.org 的已有下载引导所用的时间。
图 1. Geronimo 启动所用的秒数
竟然有 24 秒之多!我记得 Geronimo M4 所用的时间不到 10 秒。再看一下内存消耗情况,如 图 2 所示。
图 2. 内存消耗
将近 100MB。在本文结尾处,您将看到能节省多少时间和内存。
接下来将自定义所安装的已有 Geronimo 发行版。
自定义 Geronimo
现在到了有趣的地方。将在已有 Apache Geronimo 发行版中停用那些不符合需要的服务和应用程序。停用服务和取消部署服务之间是有差异的。取消部署将一个模块从 Geronimo 中彻底删除,但您可能会在取消部署后发现需要此模块,这将导致不得不重新下载一个新的 Apache Geronimo 安装。首先介绍停用 不必要的应用程序。
启动与停用应用程序
停用 Apache Geronimo 上运行的应用程序非常简单。Geronimo 初次启动时,在 图 1 中可以看到,已启动的 Web 应用程序显示在屏幕中间的 Started Application Modules 标题下。
键入以下命令停用 Web 应用程序模块:
java -jar bin\deployer.jar --user system --password manager stop <application-module-ID>
这里的 <application-module-ID> 是 Web 应用程序的标识符,例如 geronimo/ldap-demo-tomcat/1.0/car 是 ldap 演示版标识符,geronimo/welcome-tomcat/1.0/car 为 Tomcat 欢迎页面的标识符。注意,Tomcat 欢迎页面下载完毕后,可将自己的应用程序模块放置在 Web 服务器的根下,从而可实现更好的自定义。
清单 1 显示了通过使用上述命令停用的 Web 应用程序列表。
清单 1. 停用的服务
geronimo/activemq/1.0/car
geronimo/jmxdebug-tomcat/1.0/car
geronimo/daytrader-derby-tomcat/1.0/car
geronimo/jsp-examples-tomcat/1.0/car
geronimo/ldap-demo-tomcat/1.0/car
geronimo/remote-deploy-tomcat/1.0/car
geronimo/servlets-examples-tomcat/1.0/car
geronimo/welcome-tomcat/1.0/car
|
如果不是作为示例,上述列表中您可能希望保留的惟一 Web 应用程序就是 jmxdebug-tomcat,它可在使用 Java Management Extensions(JMX)开发应用程序的过程中协助调试;在使用需要 ActiveMQ 的 Java Message Service(JMS)功能的应用程序时,还有可能想保留 activemq。
通过以下命令可启动已停用的服务(在您意外停用了一项或几项服务时):
java -jar bin\deployer.jar --user system --password manager start <application-module-ID>
实际上,使用的是相同的命令,惟一的不同之处只是将 stop 替换为 start。
图 3 显示了服务器启动速度的提高;图 4 显示了更新后的内存利用情况。
图 3. 启动 Geronimo
图 4. Geronimo 的内存占用情况
启动时间减少了 10 秒,而所占用的内存减少了 30MB!真是个好消息。接下来,再来看看启动和停用服务能为您带来怎样的帮助。
启动和停用服务
如您所见,这一切值得付出努力。Apache Geronimo 应用服务器运行占用的内存减少了 30MB。如此之多的 RAM 对于任务关键型嵌入式设备是个可观的数字。下面再介绍一下如何关闭不必要的服务。
使用 Apache Geronimo 非常简单,而且幸运的是,停用监听服务与停用 Web 应用程序模块一样简单。
警告:在停用服务时务必格外谨慎,您可能尚未意识到自己将需要这些服务。不要取消部署任何服务,除非绝对确定不再需要它。
但查找要停用的 ID 略有不同。上一节中已经找到了监听服务的列表,在 图 3 显示的 Listening on Ports 标题下。很有可能的情况是,其中至少有一半的服务为多数应用程序所必需,还有一些服务用于满足其他方面的需求。最首要的任务就是:您需要了解要取消停用的服务 ID,可通过键入以下命令加以查看:
java -jar bin\deployer.jar --user system --password manager list-modules
正在运行的服务和应用程序使用 + 号表示,如 清单 2 所示。
清单 2. 正在运行的服务及可用服务
java -jar bin\deployer.jar --user system --password manager list-modules
Found 31 modules
+ geronimo/j2ee-deployer/1.0/car
+ geronimo/directory/1.0/car
+ geronimo/webconsole-tomcat/1.0/car
`-> geronimo-console-standard-1.0.war @
http://TYLER:8080/console-standard
`--> geronimo-console-framework-1.0.war @
http://TYLER:8080/console
+ geronimo/uddi-tomcat/1.0/car
`--> uddi-jetty @ http://TYLER:8080/juddi
`--> uddi-db
+ geronimo/ldap-realm/1.0/car
+ geronimo/j2ee-system/1.0/car
+ geronimo/j2ee-server/1.0/car
+ geronimo/tomcat-deployer/1.0/car
+ geronimo/geronimo-gbean-deployer/1.0/car
+ geronimo/rmi-naming/1.0/car
+ geronimo/system-database/1.0/car
+ geronimo/j2ee-security/1.0/car
+ geronimo/activemq-broker/1.0/car
+ geronimo/hot-deployer/1.0/car
+ geronimo/tomcat/1.0/car
geronimo/remote-deploy-tomcat/1.0/car
geronimo/jmxdebug-tomcat/1.0/car
geronimo/client-system/1.0/car
geronimo/ldap-demo-tomcat/1.0/car
geronimo/online-deployer/1.0/car
geronimo/client-corba/1.0/car
geronimo/activemq/1.0/car
geronimo/jsp-examples-tomcat/1.0/car
geronimo/daytrader-derby-tomcat-streamer-client/1.0/car
geronimo/client-security/1.0/car
geronimo/welcome-tomcat/1.0/car
geronimo/shutdown/1.0/car
geronimo/daytrader-derby-tomcat/1.0/car
geronimo/client/1.0/car
geronimo/servlets-examples-tomcat/1.0/car
geronimo/j2ee-corba/1.0/car
|
可以看到,前面停用了的服务之前并无 + 标记。而依然在运行的其他服务则带有一个 +。停用以下监听服务:
geronimo/directory/1.0/car
geronimo/ldap-realm/1.0/car
geronimo/activemq-broker/1.0/car
关闭的前两项服务是 LDAP 演示应用程序处理 LDAP(Lightweight Directory Access Protocol)的必备服务,而最后一项服务是 ActiveMQ 演示应用程序处理 JMS 消息处理所必需的。因此,如果不需要使用这些演示程序,关闭这些服务将节省启动时间、内存和 CPU(参见 图 5 和 图 6)。还可能想停用更多的服务,例如在应用程序不使用 Derby 的情况下,停用 system-database 服务。但上述三项服务较为不常用。也可以按上文的介绍重新启动这些服务。
图 5. Geronimo 启动情况
图 6. 内存占用情况
最终结果是,Geronimo 的启动时间节省了 50%,所占用的内存节省了 40%。不必再去对付启动 Geronimo 所带来的额外开销,因此使调试自己的应用程序及使用 Geronimo 进行工作更为轻松。还可以避免因额外的内存占用而导致 CPU 速度变慢。
结束语
遵循本文列出的指导原则,可以进一步简化 Apache Geronimo 应用程序的开发。现在,您已经学会了如何自定义 Geronimo 发行版。入侵者更难访问您的系统,而原因仅仅是监听服务、Web 应用程序和其他可能成为攻击目标的、正在运行的 GBeans 数量更少。在此基础之上,Geronimo 启动时,您可以按照自己的需要改变等待时间,而不是被迫接受,原因是可以选择只启动那些需要的应用程序和服务。最终,计算机的 CPU 和内存总占用率不会浪费在那些用不到的应用程序与服务上,从而使计算机将全部能量贡献给真正需要的操作。
务必查看 参考资料 部分,了解 Geronimo 的更多信息,了解您能为 Geronimo 社区作出怎样的贡献。感谢阅读本文!
参考资料 学习
获得产品和技术
讨论
关于作者  | |  | Tyler Anderson 曾就职于 DPMG.com 公司(一家 SEO 公司)。他为这家公司编写专用的 SEO 软件。Tyler 于 2004 年取得了 Brigham Young University 的计算机科学学位,2005 年 12 月又取得了同一所学校的计算机工程学硕士学位。目前他是位于俄勒冈州 Beaverton 的 Stexar 公司的工程师。 |
对本文的评价
|