启动JBoss 时的JVM的各项参数介绍
JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分:
- 所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间;
- 非堆区即为代码、常量、外部访问(如文件访问流所占资源)等。
然而虽然java的垃圾回收机制虽然能够很好的解决内存浪费的问题,但是这种机制也仅仅的是回收堆区的资源,而对于非堆区的资源就束手无策了,针对这样的资源回收只能凭借开发人员自身的约束来解决。就算是这样(堆区有java回收机制、非堆区开发人员能够很好的解决),当运行时所需内存瞬间激增的时候JVM无奈的也要中止程序的运行。所以本文讲述的是如何解决后者的问题。
JAVA_OPTS=”-server -Xms1536m -Xmx1536m -XX:PermSize=96m -XX:MaxPermSize=256m -XX:NewSize=320m -XX:MaxNewSize=320m -Xmn500m -XX:MaxTenuringThreshold=5″
- JAVA_OPTS并不是已成不变的,不同的应用、软硬件环境下,要想充分发挥应用的性能,这些参数里边的设置可是非常有技巧和具有经验积累的。
- 首先,常见参数种类(配置内存):(-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn)、(-XX:PermSize、-XX:MaxPermSize)。可以从列举的方式上看出我的用意,参数的配置是分组的,前者是用来配置堆区的,后者是用来配置非堆区的。
- 一般来讲对于堆区的内存分配只需要对上述两个参数进行合理配置即可,但是如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就要用到下面的三个参数了-XX:newSize、-XX:MaxnewSize、-Xmn。当然这源于对堆区的进一步细化分:新生代、中生代、老生代。java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。
参数 | 解释 |
---|---|
-server | 一定要作为第一个参数,在多个CPU时性能佳 |
-Xms | 初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 |
-Xmx | java heap最大值,使用的最大内存(上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。) |
-XX:newSize | 表示新生代初始内存的大小,应该小于 -Xms的值; |
-XX:MaxnewSize | 表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值; |
-Xmn | 至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。 |
-XX: PermSize | 设定内存的永久保存区域 |
-XX:MaxPermSize | 设定最大内存的永久保存区域 |
-Xss 15120 | 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k. |
+XX:AggressiveHeap | 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。 |
-Xss | 每个线程的Stack大小 |
-verbose:gc | 现实垃圾收集信息 |
-Xloggc:gc.log | 指定垃圾收集日志文件 |
-Xmn | young generation的heap大小,一般设置为Xmx的3、4分之一 |
-XX:+UseParNewGC | 缩短minor收集的时间 |
-XX:+UseConcMarkSweepGC | 缩短major收集的时间(提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。) |
JBoss包结构介绍
1. JBoss 的目录结构说明
目录 | 描述 |
---|---|
bin | 启动和关闭 JBoss 的脚本( run.bat 为 windows 系统下的启动脚本,shutdown.bat 为 windows 系统下的关闭脚本)。 |
client | 客户端与 JBoss 通信所需的 Java 库( JARs )。 |
docs | 配置的样本文件(数据库配置等)。 |
docs/dtd | 在 JBoss 中使用的各种 XML 文件的 DTD 。 |
lib | 一些 JAR , JBoss 启动时加载,且被所有 JBoss 配置共享。(不要把你的库放在这里) |
server | 各种 JBoss 配置。每个配置必须放在不同的子目录。子目录的名字表示配置的名字。 JBoss 包含 3 个默认的配置: minimial , default 和 all ,在你安装时可以进行选择。 |
server/all | JBoss 的完全配置,启动所有服务,包括集群和 IIOP 。 |
server/default | JBoss 的默认配置。在没有在 JBoss 命令行中指定配置名称时使用。 ( 我们下载的 JBOSS5.0 Beta4 版本默认采用此配置 ) 。 |
server/default/conf | JBoss 的配置文件。 |
server/default/data | JBoss 的数据库文件。比如,嵌入的数据库,或者 JBossMQ |
server/default /deploy | JBoss 的热部署目录。放到这里的任何文件或目录会被 JBoss 自动部署。EJB 、 WAR 、 EAR ,甚至服务。 |
server/default /lib | 一些 JAR , JBoss 在启动特定配置时加载他们。 (default 和 minimial 配置也包含这个和下面两个目录。 ) |
server/default/log | JBoss 的日志文件。 |
server/default/tmp | JBoss 的临时文件。 |
server/default/work | 存放的是JSP编译后的.java及.class文件,如果调试JSP时出错了,可以到该目录下(一级级去翻吧)去找对应的文件,调试问题。还有个小TIPS,有时我们明明把一个JSP更新到对应的目录里了,可是去刷新页面时,内容还是旧的,为了解决该问题,我们可以到work目录下,将对应的.java及.class文件删了,再刷新即可,这个原因不好推测,有时可以自动刷新,有时不行。单个的TOMCAT都能自动刷新,不知为何集成到JBOSS里却有时不行。还需注意的事,你在清除旧的java、class文件时,不能为了省事,而直接删除目录,否则刷新时会报错的,等着你的就是要重启JBOSS服务了。 |
2. “conf” 目录的内容
文件 | 描述 |
---|---|
jboss-minimal.xml | 这是 jboss-service.xml 配置文件的最简单夫的示例(它是在 minimal 配置文件集里使用的 jboss-service.xml)。 |
jboss-service.xml | jboss-service.xml 定义了核心的服务及其配置。 |
jndi.properties | jndi.properties 文件指定了当 InitialContext 使用无参数的构造函数创建时,在 JBoss 服务器里使用的 JNDI InitialContext 属性。 |
jboss-log4j.xml | 这个文件配置了 Apache log4j 框架类别优先级和 JBoss 服务器代码使用的 appender。 |
login-config.xml | 这个文件包含了当使用基于 JAAS 的安全性时适用的服务器端验证配置的样本。 |
props/* | props 目录包含了用于 jmx-console 的用户和角色属性文件。 |
standardjaws.xml | 此文件提供了旧的 EJB 1.1 CMP 引擎的缺省配置。 |
standardjboss.xml | 此文件提供了缺省的容器配置。 |
standardjbosscmp-jdbc.xml | 此文件为 JBoss CMP 引擎提供了缺省的配置文件。 |
xmdesc/*-mbean.xml | xmdesc 目录包含了 jboss-service.xml 文件里配置的服务的 XMBean 描述符。 |
3. “deploy” 目录的内容
文件 | 描述 |
---|---|
bsh-deployer.xml | 此文件配置了可将 bean shell 脚本部署为 JBoss 服务的部署者。 |
cache-invalidation-service.xml | 这个服务允许通过 JMS 通知的 EJB 缓存的自定义 invalidation。它缺省是禁用的。 |
client-deployer-service.xml | 此服务提供对 J2EE 应用程序客户端的支持。它为基于 application-client.xml 描述符的客户端应用程序管理 java:comp/env 企业命名上下文。 |
ear-deployer.xml | EAR 部署者是负责部署 J2EE EAR 文件的服务。 |
ejb-deployer.xml | EJB 部署者是负责部署 J2EE EJB JAR 文件的服务。 |
hsqldb-ds.xml | hsqldb-ds.xml 配置 Hypersonic 嵌入式数据库服务。它设置嵌入的数据库和相关的连接工厂。 |
http-invoker.sar | http-invoker.sar 包含支持基于 HTTP 的 RMI 的脱管调用者(detached invoker)。它也包含基于 HTTP 访问 JNDI 的代理绑定。 |
jboss-aop-jdk50.deployer | 此服务配置 AspectManagerService 并部署 JBoss AOP 应用程序。 |
jboss-bean.deployer | jboss-bean.deployer 提供了 JBoss microcontainer,它部署包含在 .beans 文件里的 POJO 服务。 |
jboss-ha-local-jdbc.rar | jboss-ha-local-jdbc.rar 是支持数据源失效切换的 jboss-local-jdbc.rar 的实验版本。 |
jboss-ha-xa-jdbc.rar | jboss-ha-xa-jdbc.rar 是支持数据源失效切换的 jboss-xa-jdbc.rar 的实验版本。 |
jboss-local-jdbc.rar | jboss-local-jdbc.rar 是一个 JCA 资源适配器,它实现支持 DataSource 接口但不支持 JCA 的 JDBC 驱动的 JCA ManagedConnectionFactory 接口。 |
jboss-xa-jdbc.rar | jboss-xa-jdbc.rar 是一个 JCA 资源适配器,它实现支持 XADataSource 接口的 JDBC 驱动的 JCA ManagedConnectionFactory 接口。 |
jbossjca-service.xml | jbossjca-service.xml 是 JCA 规格的应用服务器实现。它提供了将资源适配器集成到 JBoss 服务器的连接管理工具。 |
jboss-web.deploye | jboss-web.deployer 目录提供 Tomcat servlet 引擎。 |
jbossws.sar | jbossws.sar 提供 J2EE web 服务的支持。 |
jms/hsqldb-jdbc-state-service.xml | hsqldb-jdbc-state-service.xml 提供 Hypersonic 的 JMS 状态管理。 |
jms/hsqldb-jdbc2-service.xml | hsqldb-jdbc2-service.xml 使用 Hypersonic 配置 JMS 持久性和缓存。它也包含 作为 JMS 实现的核心服务的 DestinationManager MBean。 |
jms/jbossmq-destinations-service.xml | jbossmq-destinations-service.xml 配置一系列 JMS 单元测试所使用的 JMS 队列和主题。 |
jms/jbossmq-httpil.sar | jbossmq-httpil.sar 提供运行通过 HTTP 使用 JMS 的 JMS 调用层。 |
jms/jbossmq-service.xml | jbossmq-service.xml 文件配置了核心的 JBossMQ JMS 服务。 |
jms/jms-ds.xml | jms-ds.xml 文件配置了和 jms-ra.rar JCA 资源适配器一起使用的 JBossMQ JMS 提供者。 |
jms/jms-ra.rar | jms-ra.rar 是一个资源适配器,它为 JMS 连接工厂实现了 JCA ManagedConnectionFactory 接口。 |
jms/jvm-il-service.xml | jvm-il-service.xml 配置了 JVM 内部的 JMS 传输调用层。 |
jms/uil2-service.xml | uil2-service.xml 配置了 JMS version 2 统一调用层。它是快速和可靠的基于自定义套接字的传输,用于 JVM 之间的消息传递。 |
jmx-console.war | jmx-console.war 目录提供 JMX 控制台。JMX 控制台提供管理 MBean 服务器的简单的 web 界面。 |
jmx-invoker-service.sar | jmx-invoker-service.sar 是一个未解压的 MBean 服务归档,它开放了 JMX MBeanServer 接口方法的一个子集作为 RMI 接口来启用对 JMX 核心功能的远程访问。它和旧的 jmx-rmi-adaptor.sar 类似,区别是传输是由脱管调用者架构来处理的。 |
jsr-88-service.xml | jsr-88-service.xml 提供了 JSR 88 远程部署服务。 |
mail-ra.rar | mail-ra.rar 是提供 JavaMail 连接器的资源适配器。 |
mail-service.xml | mail-service.xml 文件是一个 MBean 服务描述符,它提供在 JBoss 服务器内部使用的 JavaMail 会话。 |
management/console-mgr.sar | console-mgr.sar 提供 Web 控制台。它是一个 web 应用程序/applet,提供比 JMX 控制台更丰富的 JMX 服务器管理视图。你可以用 URL http://localhost:8080/web-console/ 来访问此控制台。 |
monitoring-service.xml | monitoring-service.xml 文件配置了警告监控器,如 JMX 通知使用的控制台侦听者和电子邮件侦听者。 |
properties-service.xml | properties-service.xml 文件是一个 MBean 服务描述符,它允许自定义 JavaBeans PropertyEditor 以及系统属性。 |
scheduler-service.xml | scheduler-service.xml 和 schedule-manager-service.xml 文件是 MBean 服务描述符,它提供一个调度类型的服务。 |
sqlexception-service.xml | sqlexception-service.xml 文件是一个 MBean 服务描述符,它处理和供应商相关的 SQLException。 |
uuid-key-generator.sar | uuid-key-generator.sar 服务提供基于 UUID 的密钥生成工具。 |