JBOSS调优
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,则可以保证其方法是在全局的事务上下文中被执行的,但开启事务的成本太高,如果不需用到事务的方法需将事务关闭
5.自定义EJB容器
JBOSS是以拦截器的方式运行EJB的,如果EJB中不需要事务的支持,可将这个INTERCEPTOR注释掉
tx.TxPropagationInterceptor"/>
6.比较软的方式自定义EJB容器
将定义写在新的XML文件中,以覆盖原先的设定
<aop xmlns="urn:jboss:aop-beans:1.0">
<domain name="Non Tx Stateless Bean" extends="Intercepted Bean"
inheritBindings="false">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateless.
StatelessInstanceInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.
AllowedOperationsInterceptor"/>
<stack-ref name="EJBInterceptors"/>
</bind>
</domain>
</aop>
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中设置全局大小:<connection-property name="defaultFetchSize">50</
connection-property>
3.INSERT和UPDATE使用批量操作
4.使用PreparedStatement而不使用Statement
PreparedStatement能避免SQL语句重复解释;使用PreparedStatement cache来缓存PreparedStatement对象
5.JDBC网络调优
<connection-property name="tcpRcvBuf">65534</connection-property>
<connection-property name="tcpNoDelay">true</connection-property>
JPA/HIBERNATE调优
使用JDBC的限制:
由于是使用了原生的SQL语句,但不同的数据库SQL语句也是不同的,如果换数据库的时候SQL语句改动量大;
多表关联时,需维护JAVA OBJECT与数据表的对应关系;
加缓存时,工作量也比较大。
JPA与HIBERNATE的区别:JPA是JAVA的一个标准,HIBERNATE是JPA的一个实现
1.优化对象获取
HIBERNATE的N+1总量,如果有两个表是一对多的关系,查询父表的时候,子表的数据是不会被查出来的,直到调用查询子表的方法时子表的数据才被查出来,因此而多出一个SQL语句
使用LEFT OUTER JOIN来达到只用一个SQL语句就查出父表和子表的数据
fetch c.items order by c.id");
2.以分页的方式限制一次性获取数据的数量
3.不能同时使用分页和FETCH的方式
HIBERNATE的分页,是首先取出所有的数据再在内存中分页,以避免不同数据库中分页语句的不同
4.使用BatchSize
@BatchSize(size = 50)
加载相关联的实体集合的个数,注意个数的对象是集合,不是集合里的单个元素
5.使用named queries作查询
这样会使用到PreparedStatement中的绑定参数
6.使用批量更新与插入
session.beginTransaction();
for (int index = 0; index <1000;index++) {
Person person = new Person();
book.setCountry("Usa");
book.setCity("NY");
person.setName("Inhabitant n." + index);
session.save(person);
// Flush every 50 records
if (index % 50== 0) {
session.flush();
session.clear();
}
}
session.getTransaction().commit();
session.close();
7.使用HIBERNATE CACHE
一级缓存,在SESSION关闭前都可以使用;
二级缓存,HIBERNATE使用第三方CACHE框架来做缓存
value="true"/>
<property name="hibernate.cache.region.factory_class"
value="org.hibernate.cache.jbc2.
JndiMultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.region.jbc2.cachefactory"
value="java:CacheManager"/>
<property name="hibernate.cache.region.jbc2.cfg.entity"
value="mvcc-entity"/>
<property name="hibernate.cache.region.jbc2.cfg.collection"
value="mvcc-entity"/>
启用缓存
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region =
"customers")
public class Customer implements Serializable {
}
查询缓存
启用查询缓存
{
@NamedQuery(
name = "findCustomersByName",
query = "FROM Customer c WHERE c.name = :name",
hints = { @QueryHint(name = "org.hibernate.cacheable", value =
"true") }
)
使用缓存的策略:静态数据可以考虑,但查询和更新频率很高的、查询条件非常复杂的不建议用
jboss的7类性能调优
现在需要将项目使用的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 high
we can use thread dump and jvm arguments to test the code.
参见:
http://binma85.iteye.com/blog/786349
http://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:+UseCMSCompactAtFullCollection
XX: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”
添加完后类似于:
- <Connector port=”8080″ address=”${jboss.bind.address}”
- 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”/>
- <Connector port=”8080″ address=”${jboss.bind.address}”
- 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”/>
- <Connector port=”8080″ address=”${jboss.bind.address}”
- 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元素为 <priority value=”INFO” />
建一个新的category,内容为 <category name=”javax.faces”><priority value=”INFO” /></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 复制到<jboss>/bin
在<jboss>/bin目录里建一个文件夹,名为 native
把jbossNative/bin/META-INF/lib/linux2/x86/ 目录下所有内容复制到上一步建好的<jboss>/bin/native目录下
[6]数据库连接池优化.
摘自http://wangtong40.iteye.com/blog/737235
在JBOSS_HOME\Server\default\deploy目录下存在**-xa-ds.xml文件,用于JBOSS同数据库连接等配置,默认情况下**-xa-ds.xml文件中不包含关于数据库连接池等方面的配置信息,可以添加一下内容进行数据库连接池方面的设置:
- <min-pool-size>100</min-pool-size>
- <max-pool-size>500</max-pool-size>
[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
解压到某个目录,然后按步骤调试即可。
jboss5优化
1、调整JVM在bin.bat或bin/run.cfg文件里。
-Xms<size>设置堆的最小值;-Xmx<size>设置堆的最大值;-XX:Newsize=<size>设置年轻代的最小值;-XX:MaxNewsize=<size>设置年轻代的最大值;-XX:MaxPermSize=size设置永久代的大小。
2、配置数据源:在*-ds.xml里<min-pool-size>最小连接数;<max-pool-size>最大连接数。
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文件 .
<Connector
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"
相关推荐
JBoss性能调优涉及优化硬件资源使用、配置Java虚拟机(JVM)、调整应用服务器(JBoss AS)的设置,以及针对操作系统级别的优化,以最小的开销满足应用需求并提供快速的应用体验。 性能调优的基本思路是理解系统的...
【JBoss AS7 性能调优】 JBoss Application Server 7 (JBoss AS7) 是一款开源的应用服务器,以其高效能和快速启动而受到赞誉。然而,为了确保最佳性能,对服务器进行适当的配置和调优至关重要。大约80%的应用性能取...
【JBoss性能调优】 JBoss是一个开源的J2EE应用服务器,它的代码遵循LGPL许可证,因此在商业应用中可以免费使用。Jboss支持EJB 1.1和EJB 2.0规范,主要作为EJB的管理和运行容器。尽管Jboss核心服务主要是一个EJB...
Jboss的系统性能调优方法.首先是jbossNativejboss的webcontainer使用的apachetomcat。apachetomcat有一个扩展包,使tomcat可以通过javanativeinterface使用apacheportableruntime(APR),而APR则是大名顶顶的apache...
《JBoss性能优化整合》是一份深度探讨Jboss应用服务器性能提升的重要资料,它集结了作者反复试验与研究的心得,旨在为读者提供实用而全面的优化策略。Jboss作为一款开源的企业级Java应用服务器,其性能表现直接影响...
应用服务器,性能调优,虚拟主机,数据库配置,结合apache
Jboss 项目部署文档 Jboss 项目部署文档是指在 Jboss 服务器上部署项目的详细步骤,包括环境变量的配置、项目打包、配置文件的修改、JNDI 的配置等。以下是 Jboss 项目部署文档的详细知识点: 一、环境变量配置 ...
5. 高效运行:EJB 调用不经过网络,提升性能和安全性。 6. 一站式部署:支持直接部署 J2EE-EAR 文件,简化部署流程。 7. 集群支持:提供集群解决方案,增强系统的扩展性和可用性。 安装与配置 JBoss 涉及以下步骤:...
JBoss是著名的开源Java应用服务器,它基于Java EE(Enterprise Edition)规范,为开发者提供了全面的中间件...此外,了解如何管理和调优JVM参数,以及如何处理常见的错误和警告,也是成功运行和维护JBoss服务器的关键。
【JBOSS,JBoss安装部署】 JBoss是Red Hat公司开发的一款开源的应用服务器,它基于Java EE(Enterprise Edition)规范,提供了全面的企业级应用程序部署和管理解决方案。本篇文章将详细讲解JBoss的安装和部署过程,...
本文将根据提供的资料深入探讨JBoss调优的关键方面。 #### 前端调优 前端调优主要关注于提高客户端请求的处理效率以及资源的有效利用。 **1.1 入站HTTP请求** - **优化HTTP配置**:合理设置HTTP连接池大小、空闲...
- **性能调优**:考虑到JBOSS是一个更重的应用服务器,可能需要对应用的性能进行调优,以适应JBOSS的资源管理和调度策略。 - **安全配置**:由于JBOSS提供了更多的安全特性,例如基于角色的访问控制,因此需要重新...
JBoss AS 7.1.0.Final是在Linux环境下运行的一款开源Java应用服务器,由Red Hat公司维护。这个版本发布于2012年,它引入了许多改进和新特性,旨在提供更快的启动速度、更高的性能以及更好的模块化。在这个环境中,...
【JBoss学习全集多本书整合】集合了丰富的JBoss相关知识,涵盖了JBoss服务器的配置、管理和优化等多个方面,是深入理解与掌握JBoss的理想资料。JBoss,作为一个开源的应用服务器,基于Java EE(现在被称为Jakarta EE...
【标题】:“MyEclipse中配置JBoss” 在IT行业中,MyEclipse是一款深受开发者喜爱的集成开发环境(IDE),尤其对于Java EE项目开发来说,它提供了强大的支持。而JBoss则是一个开源的应用服务器,广泛用于部署和管理...
【JBoss 概述】 JBoss 是一个开源的、基于Java的、全面实现了J2EE规范的应用服务器。它提供了企业级的功能,如EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JTS/JTA(Java Transaction Service / ...
9. **性能优化**:提供性能调优的技巧和最佳实践,包括内存设置、线程池配置、日志优化等,以提升服务器的运行效率。 10. **故障排查**:书中可能会包含一些常见问题的解决方案,帮助读者解决在使用过程中遇到的...
"在IntelliJ IDEA 8中部署Jboss服务器图解" IntelliJ IDEA 8是 JetBrains 公司开发的一款功能强大且灵活的集成开发环境(IDE),它支持多种programming语言,包括Java、Python、Ruby、PHP等。Jboss则是一款流行的...
JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...