当前位置: 首页 > 工具软件 > JBoss JCA > 使用案例 >

tomcat启动占了12g_网络JBOSS调优整理

奚英朗
2023-12-01

WEB程序调优

1.纯JSP比JSF性能要好

2.树形数据的显示如果用JSF性能要差,不如用低层次的JAVASCRIPT

WEB SERVICE调优

1.性能不太好,尤其依赖于传输的SOAP大小,因为在XML与JAVA OBJECT的转换中消耗太多

2.加缓存在SOAP上

3.JBOSS的WEB SERVICE有三个实现,原生的、CXF和METRO,性能最好的是METRO,最差是原生的

JBOSS中的TOMCAT调优1.CONNECTOR参数

当进入JBOSS的请求到达maxThreads,且又高于acceptCount的时候,用户就会收到Connection refused的错误信息,当HTTP请求的线程空闲了maxIdleTime时,系统就会杀掉这些线程,直到到达minSpareThreads数为止

2.如何计算程序就需的线程数

CPU数*200,如4核的设800

可以通过域名为jboss.web,name=http-127.0.0.1-8080,type=ThreadPool的MBEAN观察实际的线程数

3.处理周期长的WEB线程

WEB线程处理请求时,并不会马上结束,还会继续传递到EJB层,这样如果EJB层处理周期长,会导致WEB层请求数增长来处理新进来的请求

4.如何增大线程最大处理数

这完全依赖于CPU、RAM和SOCKET数

5.使用APACHE PORTABLE RUNTIME

增加APR包能提高性能20%,如果是WINDOWS系统则不建议

6.整合APACHE WEBSERVER与JBOSS SERVER

使用APACHE WEBSERVER作为JBOSS的前端,以达到HA的效果,又能提高20%的性能

结合方式是使用mod_jk mod_proxy_ajp mod_proxy_http

7.三种方式的比较

mod_proxy_ajp要高于其他两种

8.引入mod_cluster

9.web.xml中关于JSP的调优

development=false,避免访问前的检查

checkInterval=0,避免JSP需要重新编译

trimSpaces=true,删除JSP中的空格

genStringAsCharArray=true

JBOSS中SERVICE的调优SESSION BEAN

1.stateless session bean在池中数量大小的配置

每建一个SESSION BEAN,就会在jboss.j2ee域下建一个MBEAN,通过查看其信息得知BEAN的处理统计时间来调整BEAN数量大小,配置文件:/deploy/ejb3-interceptors-aop.xml

2.stateful session bean

SFSB是被JBOSS缓存在容器中,因此客户端的每个请求都会立即响应,同样也是通过SLSB的方式查看并调整CACHE的数量大小

3.SFSB与 SLSB的比较

SFSB性能要差10%

4.事务

EJB与普通RMI SERVICE相比,就是有完整的事务支持,如果EJB采用CMT,则可以保证其方法是在全局的事务上下文中被执行的,但开启事务的成本太高,如果不需用到事务的方法需将事务关闭

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)

5.自定义EJB容器

JBOSS是以拦截器的方式运行EJB的,如果EJB中不需要事务的支持,可将这个INTERCEPTOR注释掉

tx.TxPropagationInterceptor"/>

6.比较软的方式自定义EJB容器

将定义写在新的XML文件中,以覆盖原先的设定

<?xml version="1.0" encoding="UTF-8"?>*(..))">

StatelessInstanceInterceptor"/>

AllowedOperationsInterceptor"/>

JMS

1.基本概念

JMS provider:JMS系统

Messages:客户端交流的载体

Connection factories:产生链接的工厂

Destinations:有Queues和Topics

Queues:含有一堆Messag的队列,只能发给一个客户端

Topics:可以发给多个客户端

JMS clients:生产和消费Message的东西

MDB:一个特殊的consumer

2.JMS架构

如果客户端和服务器端同一个JBOSS,则通过JCA作通讯,通过调整deploy/jca-jboss-beans.xml中的WorkManagerThreadPool的参数来调优,

如果不在一个JBOSS内,则通过远程框架进行通讯,通过调整deploy\messaging\remoting-bisocket-service.xml中的org.jboss.remoting.transport.Connector里的参数大小来调优

3.调优JBoss Messaging Connectionfactory

deploy\messaging\connection-factories-service.xml

4.调优JBoss Messaging destinations

在deploy/messaging中增加*–service.xml文件,从而增加MBEAN,来增加队列,再调整其参数

5.HornetQ

是JBOSS 6.0之后的JMS服务器,没有依赖于任何JBOSS包,可以嵌于任何程序中。

调优主要针对deploy/hornetq/hornetq-configuration.xml文件中的journal和transport参数

journal:journal-directory-存放message的地方,如果与其他文件夹共享,则会降低性能;journal-min-files:生成文件的个数,如果发现新文件建立的次数非常频繁,则考虑加大此数值来避免

6.JMS调优基本原则

减少message的大小;使用DUPS_OK_ACKNOWLEDGE;重用JMS资源,如connections, sessions, consumers, and producers;可以不持久化message的就不持久化。

持久层的调优

数据库设计调优

1.减少表所占的空间

这样IO读速度会加快,更少的内存;列的数据类型选少的;表设计要正规化(如果是报表类型的程序则非正规化的表速度要好)

2.数据库分割

如果某个表数据量太大,可将此表按某种逻辑分割成若干个小表,如按月份分成不同的表,不同月份的数据就放于不同的表中;

如果某个表中字段数太多,可将某些字段分组,不同的组建不同的表,如将BLOB类型的字段分割到新表中;

3.增加索引

对查询中用得比较锪WHERE字段做索引,索引数据是被抽出来,进行排序后单独存放的,如果不加索引,排序的动作只能在SQL被执行的时候做;

如果做了索引的字段被修改,则该字段的索引同样也要被修改,重新排序,这也会带来性能问题,因此一个表中最多只能放4-5个索引;

但如果这个表是只读的,则索引可以随意增加;

如果有组合索引,则UNIQUE的,值比较大的字段放在前面会比较好;

索引可以加在HIBERNATE的注释中

JDBC的调优

1. 使用链接池来链接数据库

数据链接的建立和关闭是一个非常昂贵的操作,能重用就重用,客户端从PreparedStatement Cache中取得对象,PreparedStatement再从链接池中取得链接,从而得以进行对数据库的操作

2.设置正确的fetch大小

如果设置了fetch大小为100,则JDBC会从数据库中取回100条记录,这样从ResultSet中读取next()是,是从内存中返回数据,超过了100再从数据库中取100以备用;

此数值一般设为当次查询总量的一半或1/4,但如果随便设高,性能反而下降;

JBOSS中设置全局大小:50

connection-property>

3.INSERT和UPDATE使用批量操作

4.使用PreparedStatement而不使用Statement

PreparedStatement能避免SQL语句重复解释;使用PreparedStatement cache来缓存PreparedStatement对象

5.JDBC网络调优

6553465534true

JPA/HIBERNATE调优

使用JDBC的限制:

由于是使用了原生的SQL语句,但不同的数据库SQL语句也是不同的,如果换数据库的时候SQL语句改动量大;

多表关联时,需维护JAVA OBJECT与数据表的对应关系;

加缓存时,工作量也比较大。

JPA与HIBERNATE的区别:JPA是JAVA的一个标准,HIBERNATE是JPA的一个实现

1.优化对象获取

HIBERNATE的N+1总量,如果有两个表是一对多的关系,查询父表的时候,子表的数据是不会被查出来的,直到调用查询子表的方法时子表的数据才被查出来,因此而多出一个SQL语句

使用LEFT OUTER JOIN来达到只用一个SQL语句就查出父表和子表的数据

Query q=entityManager.createQuery("from Customer c left outer joinfetch c.items order by c.id");

2.以分页的方式限制一次性获取数据的数量

q.setFirstResult(page*100).setMaxResults(100);

3.不能同时使用分页和FETCH的方式

HIBERNATE的分页,是首先取出所有的数据再在内存中分页,以避免不同数据库中分页语句的不同

4.使用BatchSize

@BatchSize(size = 50)

加载相关联的实体集合的个数,注意个数的对象是集合,不是集合里的单个元素

5.使用named queries作查询

这样会使用到PreparedStatement中的绑定参数

6.使用批量更新与插入

Session session=HibernateUtil.getSessionFactory().openSession();

session.beginTransaction();for(intindex=0; index<1000;index++){

Person person=newPerson();

book.setCountry("Usa");

book.setCity("NY");

person.setName("Inhabitant n."+index);

session.save(person);//Flush every 50 recordsif(index%50==0){

session.flush();

session.clear();

}}session.getTransaction().commit();

session.close();

7.使用HIBERNATE CACHE

一级缓存,在SESSION关闭前都可以使用;

二级缓存,HIBERNATE使用第三方CACHE框架来做缓存

JndiMultiplexedJBossCacheRegionFactory"/>

启用缓存

@Entity

@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL, region="customers")publicclassCustomerimplementsSerializable{

}

查询缓存

启用查询缓存

@NamedQueries({

@NamedQuery(

name="findCustomersByName",

query="FROM Customer c WHERE c.name = :name",

hints={ @QueryHint(name="org.hibernate.cacheable", value="true") })

使用缓存的策略:静态数据可以考虑,但查询和更新频率很高的、查询条件非常复杂的不建议用

现在需要将项目使用的JBOSS服务器进行一次整体调优,搜集了一些资料,准备从以下几方面进行JBOSS的性能调优:(1)首先解决之前遇到的jboss无反(假死)应问题。该内容需要下次遇到时着手解决,现在的日志已经可以每日备份,计划用thread dump分析jboss假死问题.(2)JBOSS-JVM优化,内存参数设置.(3)分析JBOSS数据压缩功能,根据需要选用.(4)选用合适的日志输出等级和标准输出数据量大小.(5)考虑使用jboss-native,提高处理静态文件的处理速度.(6)数据库连接池优化.(7)关闭不需要的jboss服务.[1] jboss无反应或者CPU/mem usage very highwe can use thread dump and jvm arguments to test the code.参见:http://binma85.iteye.com/blog/786349http://binma85.iteye.com/blog/819150[2]JBOSS-JVM 优化主要是对Jboss依赖的JVM参数进行优化设置

引用

典型服务器配置有以下几种:-Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相同-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollectionXX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎摘自:http://wangtong40.iteye.com/blog/737235

[3]分析JBOSS数据压缩功能,根据需要选用.当web容器需要大量的数据传输时,为减少数据传输时间,可以考虑启用数据压缩功能。类似css、js等数据是重点考虑对象。主要做法如下所示:打开server/default/deploy/jboss-web.deployer/server.xml找 到 protocol=”HTTP/1.1″的 Connector元素,添加属性 URIEncoding=”utf-8″ compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla, traviata” compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”添加完后类似于:

Xml代码

maxThreads=”250″maxHttpHeaderSize=”8192″

emptySessionPath=”true”protocol=”HTTP/1.1″

enableLookups=”false”redirectPort=”8443″acceptCount=”100″

connectionTimeout=”20000″disableUploadTimeout=”true”URIEncoding=”utf-8″compression=”on”compressionMinSize=”2048″noCompressionUserAgents=”gozilla, traviata”compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”/>

maxThreads=”250″maxHttpHeaderSize=”8192″

emptySessionPath=”true”protocol=”HTTP/1.1″

enableLookups=”false”redirectPort=”8443″acceptCount=”100″

connectionTimeout=”20000″disableUploadTimeout=”true”URIEncoding=”utf-8″compression=”on”compressionMinSize=”2048″noCompressionUserAgents=”gozilla, traviata”compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”/>

maxThreads=”250″maxHttpHeaderSize=”8192″

emptySessionPath=”true”protocol=”HTTP/1.1″

enableLookups=”false”redirectPort=”8443″acceptCount=”100″

connectionTimeout=”20000″disableUploadTimeout=”true”URIEncoding=”utf-8″compression=”on”compressionMinSize=”2048″noCompressionUserAgents=”gozilla, traviata”compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”/>

[4]选用合适的日志输出等级和标准输出数据量大小.打开server/default/conf/jboss-log4j.xml ,这是一个log4j的配置文件。log4j的详细配置说明请参看  http://logging.apache.org/log4j/1.2/index.html  。日志输出的太多,会导致服务器性能降低,所以减少不必要的日志输出。方法大体如下:找到 name=”org.jboss” 的category 元素,设置里面的priority元素为 建一个新的category,内容为 log4j 还能够将不同的日志输入到不同的地方,为了以后维护方便,应该将不同 category的日志输入到不同的文件里。详细方法参看上面的网站里的说明。[5]考虑使用jboss-native,提高处理静态文件的处理速度.安装jbossNative    jboss的web container使用的 apache tomcat (http://www.apache.org)。 apache tomcat 有一个扩展包,使tomcat可以通过 java native interface 使用 apache portable runtime (APR),而APR则是大名顶顶的apache httpd 网络服务器的运行时环境。用了这个扩展之后,就使得tomcat可以借助于apache httpd的力量,性能得以提升,尤其是处理静态文件时效率更高。Jboss native,实际上就是tomcat的这个native的扩展,只不过被jboss又添进了一些为了和jboss更好协作而加进去的东西。要安装jboss native, 按以下步骤进行请到jboss的网站上下载,地址是http://www.jboss.org/jbossweb/downloads/jboss-native/?action=a&windowstate=maximized, 依据服务器环境选择合适的版本。 目前我们用的版本是JBoss Native 2.0.4 Linux x86 。解压下载后的压缩包到某个目录,比如 jbossNative目录将jbossNative/bin/META-INF/bin/linux2/x86/openssl 复制到/bin在/bin目录里建一个文件夹,名为 native把jbossNative/bin/META-INF/lib/linux2/x86/ 目录下所有内容复制到上一步建好的/bin/native目录下[6]数据库连接池优化.摘自http://wangtong40.iteye.com/blog/737235在JBOSS_HOME\Server\default\deploy目录下存在**-xa-ds.xml文件,用于JBOSS同数据库连接等配置,默认情况下**-xa-ds.xml文件中不包含关于数据库连接池等方面的配置信息,可以添加一下内容进行数据库连接池方面的设置:

Xml代码

100

500

[7]关闭不需要的jboss服务.摘自http://wangtong40.iteye.com/blog/737235在JBOSS中提供许多通常不需要的服务和Jar包,比如JMX、Mail、AOP、Hibernate等,可以根据具体项目所涉及的技术,删减JBOSS内置应用,从而提高JBOSS中间件启动速度,减少占用系统资源。删减服务    在%JBOSS_HOME%/server/default/deploy中含有一些比如jboss-aop.deployer等目录和mail-service.xml等应用配置文件,如果不需要使用这些应用的话,可以将其一一删除,不过删除时要分外小心,避免应用系统无法启动。下图为只包含数据库应用的一个已删减不需要服务后的deploy文件夹目录:删减Jar包   在%JBOSS_HOME%/server/default/lib中包含一些应用系统不需要的Jar包,这些包同样可以进行删除。

Jboss的系统性能调优方法

首先是jbossNative

jboss的web container使用的 apache tomcat。 apache tomcat 有一个扩展包,使tomcat可以通过 java native interface 使用 apache portable runtime (APR),而APR则是大名顶顶的apache httpd 网络服务器的运行时环境。用了这个扩展之后,就使得tomcat可以借助于apache httpd的力量,性能得以提升,尤其是处理静态文件时效率更高。Jboss native,实际上就是tomcat的这个native的扩展,只不过被jboss又添进了一些为了和jboss更好协作而加进去的东西。

要安装jboss native, 按以下步骤进行.

请到jboss的网站上下载,依据服务器环境选择合适的版本。 目前我们用的版本是JBoss Native 2.0.4 Linux x86 。

解压下载后的压缩包到某个目录,比如 jbossNative目录

将jbossNative/bin/META-INF/bin/linux2/x86/openssl 复制到/bin

在/bin目录里建一个文件夹,名为 native

把jbossNative/bin/META-INF/lib/linux2/x86/ 目录下所有内容复制到上一步建好的/bin/native目录下.

然后是降低Jboss日志等级

打开 /server/default/conf/jboss-log4j.xml ,这是一个log4j的配置文件。log4j的详细配置说明请参看http://logging.apache.org/log4j/1.2/index.html 。日志输出的太多,会导致服务器性能降低,所以减少不必要的日志输出。方法大体如下:

找到 name=”org.jboss” 的category 元素,设置里面的priority元素为

建一个新的category,内容为

log4j 还能够将不同的日志输入到不同的地方,为了以后维护方便,应该将不同 category的日志输入到不同的文件里。详细方法参看上面的网站里的说明。

起用jboss内的tomcat对传输数据的压缩功能

合同管理里用了大量的javascript css等,为了减少传输时间,可以起用压缩功能。方法是:

打开/server/default/deploy/jboss-web.deployer/server.xml

找到 protocol=”HTTP/1.1″的 Connector元素,添加属性 URIEncoding=”utf-8″ compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla, traviata” compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”

添加完后类似于:

maxThreads=”250″ maxHttpHeaderSize=”8192″

emptySessionPath=”true” protocol=”HTTP/1.1″

enableLookups=”false” redirectPort=”8443″ acceptCount=”100″

connectionTimeout=”20000″ disableUploadTimeout=”true” URIEncoding=”utf-8″ compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla, traviata” compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”/>

使用ehcache做hibernate的二级缓存

起用二级缓存,可以大大提高hibernate的运行效率。

到这里下载 ehcache

解压到某个目录,然后按步骤调试即可。

1、调整JVM在bin.bat或bin/run.cfg文件里。

-Xms设置堆的最小值;-Xmx设置堆的最大值;-XX:Newsize=设置年轻代的最小值;-XX:MaxNewsize=设置年轻代的最大值;-XX:MaxPermSize=size设置永久代的大小。

2、配置数据源:在*-ds.xml里最小连接数;最大连接数。

3、配置HTTP请求线程池deployer/jbossweb.sar/server.xml:maxTreads最大线程;minSpareThreads超过现在用线程的数量;maxSpareThreads超过这个数量的空闲数量的线程将被关闭;accpetCount排除等待一个线程空闲的最大请求数。

4、调整jspservlet/jbossweb.deployer/web.xml里development为true应用服务器会查看jsp是否使用修改文本间隔进行更新了,为false,修改的jsp会使用检查间隔在后台被编译。checkInterval查看jsp是否需要被重新编译的检查间隔秒数,如果为0里,jsp不会因为修改或重新编译而被查看。

5、删除不需要的服务。

邮件服务:server/xxx/deply/mail-service.xml,server/xxx/lib/mail*.jar

调试程序服务:service server/xxx/deploy/scheduler-service.xml,server/xxx/deploy/schedule-manager-service.xml,server/xxx/lib/cheduler-plugin*.jar

监视服务:service server/xxx/deploy/monitoring-service.xml,server/xxx/lib/Jboss-monitoring.jar

消息发送(JMS):server/xxx/deploy/meassaging,server/xxx/deploy/jms-ra.jar,server/xxx/lib/jboss-message*.jar

唯一ID键生成器:server/xxx/deploy/uuid-key-generator.sar,server/xxx/lib/automumber-plugin.jar

HTTP调用程序服务:server/xxx/deploy/http-invoker.sar,server/xxx/httpha-invoker.sar(仅在all配置中)

主页:server/xxx/deploy/root.war

JMX控制台:server/xxx/deploy/jmx-console.war

Web控制台:server/xxx/deploy/management

Quartz调试程序服务:server/xxx/deploy/quartz-ra.rar

一.调整JBOSS最大连接数.

配置deploy/jboss-web.deployer/server.xml文件 .

port="8080"

address="0.0.0.0"

maxThreads="1600"

minSpareThreads="100"

maxSpareThreads="250"

emptySessionPath="false"

enableLookups="false"

redirectPort="8443"

acceptCount="800"

connectionTimeout="20000"

disableUploadTimeout="true"

URIEncoding="UTF-8"

/>

maxThreads:表示最多同时处理的连接数。应该将线程数(最大线程数)设置比最大预期负载(同时并发的点击)多25%(经验规则)。

acceptCount:当同时连接的人数达到maxThreads时,还可以接收排队的连接。

minSpareThread:指“启动以后,总是保持该数量的线程空闲等待”;设置比预期负载多25%。

maxSpareThread:指“如果超过了minSpareThread,然后总是保持该数量的线程空闲等待”;设置比预期负载多25%。

其中主要修改两个参数maxThreads和acceptCount值。增加maxThreads,减少acceptCount值有利缩短系统的响应时间。但是maxThreads和acceptCount的总和最高值不能超过6000,而且maxThreads过大会增加CPU和内存消耗,故低配置用户可通过降低maxThreads并同时增大acceptCount值来保证系统的稳定。

下表罗列出了在不同并发情况下jboss参数与并发在线的一般关系。

并发数

服务器内存

jboss参数

maxThreads

acceptCount

50以下

2G

256

800

50-300

4G

600

1024

300-800

8G

1024

1528

800-1000

8G

1024

2048

1000-1200

12G

1526

2048

1200-1500

16G

2048

2048

二.调整 jvm参数

A:JVM启动参数共分为三类:

其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;

其二是非标准参数(-X),指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。但是在生产环境中,并不保证所有jvm实现都满足,所以为了提高性能,往往需要调整这些参数,以求系统达到最佳性能。另外这些参数不保证向后兼容,也即是说“如有变更,恕不在后续版本的JDK通知”(这是官网上的原话);

其三是非Stable参数(-XX),这类参数在jvm中是不稳定的,不适合日常使用的,后续也是可能会在没有通知的情况下就直接取消了,需要慎重使用。

B:而JVM内存又可分为三个主要的域:

新域、旧域以及永久域。JVM生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便进入旧域。而在永久域中是用来存储JVM自己的反射对象的,如class和method对象,而且GC(Garbage Collection)不会在主程序运行期对永久域进行清理。其中新域和旧域属于堆,永久域是一个独立域并且不认为是堆的一部分。

C:各主要参数的作用如下:

-Xms:设置jvm内存的初始大小

-Xmx:设置jvm内存的最大值

-Xmn:设置新域的大小(这个似乎只对 jdk1.4来说是有效的,后来就废弃了)

-Xss:设置每个线程的堆栈大小(也就是说,在相同物理内存下,减小这个值能生成更多的线程)

-XX:NewRatio :设置新域与旧域之比,如-XX:NewRatio = 4就表示新域与旧域之比为1:4

-XX:NewSize:设置新域的初始值

-XX:MaxNewSize :设置新域的最大值

-XX:PermSize:设置永久域的初始值

-XX:MaxPermSize:设置永久域的最大值

-XX:SurvivorRatio=n:设置新域中Eden区与两个Survivor区的比值。(Eden区主要是用来存放新生的对象,而两个 Survivor区则用来存放每次垃圾回收后存活下来的对象)

D:常见的错误:

java.lang.OutOfMemoryError相信很多开发人员都用到过,这个主要就是JVM参数没有配好引起的,但是这种错误又分两种:java.lang.OutOfMemoryError: Java heap space和java.lang.OutOfMemoryError: PermGen space,其中前者是有关堆内存的内存溢出,可以同过配置-Xms和-Xmx参数来设置,而后者是有关永久域的内存溢出,可以通过配置 -XX:MaxPermSize来设置。

下面是个例子,请根据实际情况进行修改,修改run.conf文件中的如下内容: JAVA_OPTS="-Xms256m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -Djboss.platform.mbeanserver"

 类似资料: