自WebLogic 以来Java管理API (JMX)对管理WebLogic服务器而言是必需的通过这个API你可以在应用程序服务器里搜索管理beans (mbeans) 并且通过它们你既可以查询配置信息又可以查询runtime监控信息 此外通过这个API还可以用来改变服务器的配置 事实上这个API 已在控制台和其他的管理工具上使用着用来完成它们的工作和提供报告数据 这个API是一个强大的监控工具让我们来看一个例子 在这个应用程序中有大部分的静态内容一些你的个性化的JSP页面一个注册系统一个基于JMS(Java Messaging ServicesJava消息服务)的数据系统以及一个小付费应用系统在这个应用程序中在哪里使用JMX对我们有利呢?在静态页面上你可以为FileServlet存取信息并且可以看到花费了多少时间用来服务静态内容时间可能比你预期的要少因为浏览器自动的在客户端缓存了部分内容大多数对静态内容的请求将会是HEAD请求用来检查变化对于动态页面在系统中的每个servlet是被分别计算地这个数据不能很好的反映用户的经验 (因为用户在他们送出请求和接到页面的返回之间存在延迟)但是这些数据告知了平均每个servlet花在一个请求上的时间以及多少个请求被完成我们的注册系统是一个实体bean而付费系统是一个由外部服务返回的无状态会话bean 两个bean都能被监控而且通过这些监控信息可以帮助我们用来优化缓存和池的大小我们的数据同样能有助于决定是否我们已经得到了所需要的信息或是决定多少用户正在使用数据吞吐量也可以使用JMS的topic和queue类型的mbean的属性来计算此外所有的JDBC连接都可以被监控而且从它们的mbeans你能发现多少连接池被争用举例来说这将帮助你判断是否需要更多的数据库客户端授权 mbeans 在WebLogic服务器中的第二种用途是用于配置信息通过配置mbeans所有资源的配置都被包含在runtime中这些mbeans本质上是被包含在configxml文件里的信息的表示部署在服务器监听端口上的应用程序的所有内容都包括在这些接口中大多数个别的属性是直接相关直接然而描述一个部署单元的属性集合是复杂的并且为了方便它们被集合在weblogicDeployer类中直接访问它们是可能的但是除了看配置以及不改变它之外的操作是不被推荐的其余的属性是随意的但要小心但如果组件(如JDBC池)被重新部署或服务器重新启动大多数这些属性实际上只改变运行时的行为这些配置性的mbeans 应用的作用范围从决定为某一特定应用使用资源到调整基于来自监mbeans的反馈数值 正如你所看到的这有许多信息――但是如果你对JMS和WebLogic服务器都不熟悉你如何着手呢? 它实际上不那么难 只要你能使用JNDI并且可以阅读JavaDocs你就会发现操纵 mbeans是相当容易的在下面你所看见的代码示例中会告诉你如何得到本地服务器的mbean home接口以及JDBC池 MBeanHome home = (MBeanHome) new InitialContext()lookup(MBeanHomeLOCAL_JNDI_NAME); Set pools = homegetMBeansByType(JDBCConnectionPool); 上面的代码给出了对于JDBC(Java DataBase ConnectivityJava数据库连接)池的配置mbean如果你想监控连接池而不考虑它们的配置只要通过添加Runtime来改变mbean的类型就可以完成从这个mbean你可以确定重要的信息比如是否有连接洩漏――你甚至可以得到一个堆栈追蹤找到该连接的具体位置 如果你不想做任何Java编程就像从一个脚本文件中一样的使用JMX mbean系统怎么办?幸运的是我们有一个命令行工具它能让你以命令行的方式直接查看和改变mbean-weblogicAdmin除了PINGing服务器得到JNDI列表重置连接池以及关闭服务器外它给出了直接访问mbean的分层结构在下面的代码示例中你将看到这样的一个weblogicAdmin的指令 java weblogicAdmin username system password [password] url [url] GET pretty type JDBCConnectionPool 相比于在这些mbeans上加上属性的类型描述器这段代码给出了关于mbean的简单易读的描述同样的有一个SET命令会在系统中改变任何mbean的属性 拥有这种工具你应该能够在Java内部以及从脚本外部监控你的应用程序 |