`
longgangbai
  • 浏览: 7372085 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

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,则可以保证其方法是在全局的事务上下文中被执行的,但开启事务的成本太高,如果不需用到事务的方法需将事务关闭

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)

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

<interceptor-ref name="org.jboss.aspects.
tx.TxPropagationInterceptor"
/>

6.比较软的方式自定义EJB容器
将定义写在新的XML文件中,以覆盖原先的设定

<?xml version="1.0" encoding="UTF-8"?>
<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="tcpSndBuf">65534</connection-property>
<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语句就查出父表和子表的数据

Query q = entityManager.createQuery("from Customer c left outer join
fetch 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 (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框架来做缓存

<property name="hibernate.cache.use_second_level_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"/>

启用缓存

@Entity
@Cache(usage 
= CacheConcurrencyStrategy.TRANSACTIONAL, region =
"customers")
public class Customer implements Serializable {
}


查询缓存

<property name="hibernate.cache.use_query_cache" value="true"/>


启用查询缓存

@NamedQueries(
{
@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” 

添加完后类似于: 

Xml代码  
  1. <Connector port=”8080″ address=”${jboss.bind.address}”      
  2. maxThreads=”250″ maxHttpHeaderSize=”8192″   
  3. emptySessionPath=”true” protocol=”HTTP/1.1″   
  4. enableLookups=”false” redirectPort=”8443″ acceptCount=”100″   
  5. 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”/>  
 
 
  1. <Connector port=”8080″ address=”${jboss.bind.address}”     
  2. maxThreads=”250″ maxHttpHeaderSize=”8192″  
  3. emptySessionPath=”true” protocol=”HTTP/1.1″  
  4. enableLookups=”false” redirectPort=”8443″ acceptCount=”100″  
  5. 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”/>  
 
  1. <Connector port=”8080″ address=”${jboss.bind.address}”     
  2. maxThreads=”250″ maxHttpHeaderSize=”8192″  
  3. emptySessionPath=”true” protocol=”HTTP/1.1″  
  4. enableLookups=”false” redirectPort=”8443″ acceptCount=”100″  
  5. 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文件中不包含关于数据库连接池等方面的配置信息,可以添加一下内容进行数据库连接池方面的设置: 

Xml代码  
  1. <min-pool-size>100</min-pool-size>      
  2. <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"


 

分享到:
评论

相关推荐

    (完整版)Java系统架构师面试题 (2).docx

    Java系统架构师面试题整理 本文总结了Java系统架构师面试题,涵盖了OOP、IOC、AOP、J2EE框架、SOA、ROA、JVM、Java通讯、软件架构、服务器、中间件、WEB服务器、权限分派、负载平衡、数据库设计、项目管理、团队...

    Java学习的详细路线图

    - **网络编程**:学习TCP/IP和UDP编程,实现客户端与服务器之间的通信。 - **反射注解**:了解Class类的使用方法,掌握注解的应用场景。 #### 四、数据库&JDBC编程 - **SQL基础**(重点): - **SQL基础**:理解...

    基于COMSOL流固耦合接口的堤坝边坡稳定性分析及应用

    内容概要:本文详细介绍了如何使用COMSOL软件进行堤坝边坡稳定性的流固耦合分析。首先构建了一个二维梯形断面堤坝模型,设置了合理的土体参数,特别是采用了Mohr-Coulomb准则来描述土体行为。接着,在流固耦合接口中引入了固体力学和多孔介质流动模型,确保孔隙水压力对土体应力的影响得到充分考虑。文中还讨论了边界条件的设定,如坝基固定约束、下游坡面自由以及上游水位骤降工况,并提供了具体的MATLAB代码示例。此外,针对求解过程中可能出现的收敛问题提出了优化建议,强调了网格划分的重要性及其对计算效率的影响。最后,通过分析塑性应变集中区和剪切应变率积分量来进行实时预警。 适合人群:从事岩土工程、水利工程等相关领域的研究人员和技术人员,尤其是对流固耦合仿真感兴趣的工程师。 使用场景及目标:适用于需要评估堤坝边坡稳定性的工程项目,旨在提高对复杂地质条件下边坡行为的理解,提供更加精确的安全评估手段。 其他说明:文中不仅涵盖了详细的建模步骤和技术细节,还包括了许多实用的经验分享和技巧提示,有助于读者更好地掌握COMSOL流固耦合仿真的应用。

    【敏捷项目管理】Scrum.org专业敏捷领导力(PAL I)认证考试指南:备考策略与关键知识点解析

    内容概要:本文详细介绍了Scrum.org专业敏捷领导力认证(PAL I)的相关信息,包括考试概述、考试详情、考试大纲、样题和备考建议。PAL I考试包含36道选择题,考试时长为60分钟,通过分数为85%,考试费用为200美元。考试内容涵盖Scrum框架的理解与应用、Scrum团队、事件、工件、完成定义、扩展、人员与团队的发展、领导风格、教练与指导、产品管理、持续质量、优化流程以及敏捷组织的演变等多个方面。通过认证有助于职业发展,提供新的就业机会、更高的薪酬或内部认可。 适合人群:希望获得Scrum.org专业敏捷领导力认证的个人,特别是那些希望提升敏捷管理技能并在组织中推动敏捷转型的领导者和管理者。 使用场景及目标:①帮助考生深入了解Scrum框架及其核心概念;②掌握Scrum团队运作、事件、工件和扩展的实际应用;③理解并应用敏捷领导风格、教练与指导技巧;④学习如何在复杂环境中管理和交付产品;⑤掌握持续质量管理和优化流程的方法;⑥了解如何在传统组织中实施敏捷变革。 阅读建议:备考过程中应先熟悉PAL I考试大纲,制定合理的复习计划。建议参加Scrum.org提供的官方培训课程,多做样题和模拟考试,通过实践不断巩固所学知识。此外,利用ProcessExam.com提供的在线练习测试,评估自己的强项和弱项,有针对性地进行准备,直到能够在模拟考试中取得高分。

    DP Model 联动插件 MAX2018.zip

    DP Model 联动插件 MAX2018

    单向光伏储能逆变器关键技术解析:MPPT算法、电池管理和逆变控制

    内容概要:本文详细介绍了单向光伏储能逆变器的工作原理和技术要点。首先,文章解释了单向储能逆变器的硬件拓扑结构,包括光伏Boost电路、电池双向DC/DC和离网逆变器。接着,深入探讨了最大功率点跟踪(MPPT)算法的具体实现,如扰动观察法及其改进版本变步长追踪法。此外,还讨论了电池管理系统中的充电状态机以及逆变环节中的PWM配置和数字PI调节器的应用。文中提供了具体的代码示例来帮助理解各个控制策略,并分享了一些实际工程项目中的经验和教训,如温度补偿对PWM死区时间的影响、负载突变时的稳压措施等。 适合人群:从事光伏储能系统设计与开发的技术人员,尤其是有一定电子电路和嵌入式编程基础的研发人员。 使用场景及目标:适用于希望深入了解单向光伏储能逆变器内部工作机制的专业人士,旨在提高他们在MPPT算法优化、电池保护机制设计以及逆变控制方面的技能水平。 其他说明:文章不仅涵盖了理论知识,还包括了许多来自真实项目的实践经验,为读者提供了一个全面的学习视角。

    分布式驱动电动汽车七自由度动力学模型及Carsim与Simulink联合仿真验证

    内容概要:本文详细介绍了分布式驱动电动汽车的七自由度动力学模型及其在Carsim与Simulink平台上的联合仿真验证。七自由度动力学模型涵盖车辆纵向、横向、横摆运动及四个车轮的转动,能够全面描述车辆的多维运动状态。文中通过具体代码示例解释了车轮转动自由度的计算方法,并探讨了扭矩分配策略对轮胎力动态变化的影响。联合仿真部分重点讲述了Carsim和Simulink之间的数据交互设置,包括仿真步长同步、双移线工况测试、轮胎模型选择等问题。此外,文章还提供了仿真过程中的一些实用技巧和注意事项,如版本兼容性、坐标系对齐等。 适合人群:从事汽车工程、车辆动力学仿真、自动驾驶技术研发的专业人士和技术爱好者。 使用场景及目标:适用于希望深入了解分布式驱动电动汽车动力学建模及仿真的研究人员和技术人员。目标是掌握七自由度动力学模型的具体实现方法,学会利用Carsim和Simulink进行联合仿真验证,提高对车辆复杂运动行为的理解和预测能力。 其他说明:文中提到的相关文件和工具可以帮助读者快速上手实践,同时附带的参考文献也为进一步研究提供了理论支持。

    2RC等效电路模型参数离线辨识方法及Python/Matlab代码实现

    内容概要:本文详细介绍了2RC等效电路模型参数的离线辨识方法,涵盖数据预处理、微分方程建模、状态空间离散化以及参数辨识的具体步骤。首先,通过对实测电压电流数据进行时间戳对齐和滑动窗口去噪等预处理手段,确保输入数据的质量。接着,基于2RC模型的状态方程,采用离散化方法避免数值不稳定问题。参数辨识部分提供了两种主要方法:分段线性回归适用于高质量数据,而全局优化法则利用遗传算法和最小二乘法结合,能够处理复杂的非线性关系并防止过拟合。文中还强调了OCV-SOC曲线的准确性对R0估计的影响,并给出了具体的代码实现和优化技巧。 适用人群:从事电池管理系统(BMS)开发、电池建模研究的技术人员,尤其是有一定编程基础并对电池特性有一定了解的研发人员。 使用场景及目标:帮助工程师从实验室采集的充放电数据中提取有效的2RC等效电路模型参数,提高电池性能预测的准确性。具体应用场景包括但不限于电动汽车、储能系统等领域。 其他说明:附带完整的实验数据包、参数辨识工具箱及操作手册,提供了一键生成拟合对比图的验证脚本,便于用户快速上手实践。

    【多目标优化】基于Python PuLP库的多目标线性规划模型构建与求解:复杂约束条件下的资源分配优化系统设计如何使用Python的(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文档详细介绍了多目标优化问题的建模与求解方法,特别是通过Python的PuLP库实现线性规划问题的具体步骤。文中构建了一个包含54个决策变量和三个目标函数(最大化RE、最小化Q、最小化fun1和fun2)的多目标优化模型,并添加了多种类型的约束条件,如资源约束、比例约束、需求满足约束、额外比例约束、总成本约束、混合约束、最大值约束、变量分解约束以及整数变量约束。为了有效求解这一复杂的多目标优化问题,文档提出了分层优化法和加权法两种策略,并详细展示了分阶段求解的过程。此外,还讨论了模型复杂度管理和求解器选择的优化建议,包括使用商业求解器(如Gurobi/CPLEX)、设置合理的MIPGap以及应用ε-约束法处理多目标问题。最后,文档提供了完整的代码实现,涵盖从问题初始化到结果输出的全过程。 适合人群:具备一定数学建模基础和编程经验的研究人员、工程师或数据科学家,尤其是对线性规划和多目标优化感兴趣的读者。 使用场景及目标:①帮助读者理解和掌握多目标优化问题的建模方法;②指导读者使用Python的PuLP库进行线性规划问题的求解;③提供分层优化法和加权法等多目标优化策略的应用实例;④通过具体案例展示如何处理复杂的约束条件和变量类型。 其他说明:本文档不仅提供了详细的理论分析,还附带了完整的代码实现,便于读者实践操作。建议读者在学习过程中结合代码进行调试,逐步理解每个步骤的作用和意义。此外,对于大规模或复杂问题,建议尝试使用更强大的求解器以提高求解效率。

    炼石图解自然资源部自然资源领域数据安全管理办法V1.0.02024100页.pdf

    炼石图解自然资源部自然资源领域数据安全管理办法V1.0.02024100页.pdf

    无线充电仿真:基于Simulink的四套磁耦合谐振无线电能传输模型解析

    内容概要:本文详细介绍了四套用于无线电能传输(WPT)的磁耦合谐振(MCR)模型,分别是LLC谐振器、LCC-S拓扑、LCC-P拓扑以及S-S拓扑补偿。每种模型都有独特的特点和应用场景。LLC谐振器专注于12/24V切换的闭环调频控制,LCC-S拓扑强调磁耦合系数对效率的影响及其补偿机制,LCC-P拓扑则致力于恒流输出的稳定性,而S-S拓扑提供了参数设计工具包,适用于初学者。文中不仅分享了具体的MATLAB/Simulink代码片段,还讨论了实际应用中的注意事项和技术细节。 适合人群:从事无线充电研究与开发的技术人员、高校师生及相关领域的研究人员。 使用场景及目标:帮助读者理解和掌握不同拓扑结构的工作原理及其在实际工程中的应用技巧,提高无线充电系统的性能和可靠性。同时,也为进一步的研究提供有价值的参考资料。 其他说明:文章通过实例展示了如何利用Simulink进行高效的仿真建模,并指出了一些常见的陷阱和解决方案。对于希望深入了解无线充电技术的人来说,是一份不可多得的学习材料。

    tesseract-langpack-khm-4.0.0-6.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统tesseract-langpack-khm-4.0.0-6.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tesseract-langpack-khm-4.0.0-6.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    四旋翼飞行器编队避险飞行的Matlab仿真与关键技术解析

    内容概要:本文详细介绍了四旋翼飞行器编队避险飞行的Matlab仿真过程及其核心技术。首先探讨了编队控制的核心——分布式PID控制器,用于保持队形稳定。接着阐述了避障策略,采用势场法和动态窗口法相结合的方式,确保无人机能够灵活避开障碍物并迅速恢复编队。此外,文中还涉及了状态机控制逻辑、通信协议模拟、以及一些实用的调试技巧和优化措施。通过具体的代码示例和实验数据,展示了如何实现高效的编队飞行和避障操作。 适合人群:从事无人机技术研发的研究人员、工程师和技术爱好者。 使用场景及目标:适用于希望深入了解四旋翼飞行器编队控制和避障算法的设计与实现的专业人士。目标是在掌握相关理论的基础上,能够独立完成类似项目的开发和调试。 其他说明:文中提供的代码片段和仿真结果有助于读者更好地理解和实践所介绍的技术细节。同时,作者分享了许多宝贵的实战经验和注意事项,对于初学者来说非常有价值。

    COMSOL等离子体BIC仿真:基于Drude模型的参数化建模与优化

    内容概要:本文详细介绍了如何利用COMSOL进行等离子体BIC(连续谱中的束缚态)仿真的方法和技术要点。首先,通过构建等离子体光栅模型并设置Drude模型参数,确保仿真环境的真实性和准确性。接着,探讨了周期性边界的正确设置以及参数化扫描的应用,强调了网格划分和后处理步骤的重要性。文中还提到了一些实用技巧,如引入随机几何误差以加速BIC的检测,以及如何通过电场模分布图和傅里叶变换确认BIC的存在。最后,讨论了等离子体BIC在光子晶体和超表面设计中的应用前景及其挑战。 适合人群:从事等离子体物理学、光子学及相关领域的科研人员和工程师,尤其是有一定COMSOL使用经验的研究者。 使用场景及目标:帮助研究人员理解和掌握COMSOL中等离子体BIC仿真的关键技术,提高仿真精度和效率,为设计高品质因子谐振器提供理论支持和技术指导。 其他说明:文中提供了大量具体的代码示例和实践经验,有助于读者快速上手并在实践中不断优化仿真模型。同时,强调了参数敏感性和数值稳定性的注意事项,避免常见错误。

    智能交通领域基于Matlab GUI的模糊车牌还原系统:维纳滤波、最小二乘法滤波、L-R循环边界法的应用

    内容概要:本文详细介绍了基于Matlab GUI界面的模糊车牌还原系统的设计与实现。该系统旨在解决因天气、车速等因素导致的车牌图像模糊问题,提供了一种便捷的解决方案。系统主要分为三个部分:一是通过uigetfile函数实现图像的选择与加载;二是对图像进行模糊处理,模拟现实中的模糊场景;三是提供四种不同的还原算法(维纳滤波、最小二乘法滤波、L-R循环边界法)供用户选择,每种算法针对不同类型的模糊情况有不同的优势。此外,还详细描述了Matlab GUI界面的设计,包括按钮、下拉菜单等功能的实现及其回调函数的编写。 适合人群:从事智能交通领域的研究人员和技术人员,特别是那些对图像处理和车牌识别感兴趣的人。 使用场景及目标:①帮助用户理解和掌握Matlab在图像处理方面的强大功能;②为模糊车牌的处理提供一种便捷的解决方案;③通过实际案例展示不同算法的效果,便于用户根据实际情况选择最合适的算法。 其他说明:文中不仅提供了详细的代码示例,还分享了一些实用的经验和技巧,如噪声估计、迭代次数设置等,有助于提高系统的稳定性和准确性。同时,作者也提到该系统已在某些实际场景中进行了测试并取得了良好的效果。

    Matlab/Simulink中光伏PV模型并网与储能系统的MPPT算法实现及优化

    内容概要:本文详细介绍了如何在Matlab/Simulink中搭建光伏PV模型并网及储能系统,并深入探讨了MPPT(最大功率点跟踪)算法的不同实现方式及其优化。主要内容包括光伏PV模型的搭建,通过PV Array模块设置关键参数;MPPT算法的三种实现方法:扰动观察法、变步长扰动观察法和电导增量法,每种方法都附有详细的Matlab代码示例;并网及储能模型的搭建,涉及逆变器控制和储能电池的充放电控制策略。文中不仅提供了理论推导,还有具体的代码实现和调试技巧。 适合人群:从事可再生能源研究的技术人员、高校相关专业师生、对光伏系统感兴趣的工程师。 使用场景及目标:适用于希望深入了解光伏系统工作原理的研究人员,特别是希望通过仿真软件进行光伏系统设计和优化的人群。目标是掌握光伏PV模型的搭建方法,理解并实现不同的MPPT算法,学会并网及储能系统的控制策略,最终能够应用于实际工程项目中。 其他说明:文章强调了在实际操作过程中需要注意的问题,如参数的选择、代码的调试技巧等,帮助读者更好地理解和应用所学知识。此外,还提到了一些实用的小技巧,如使用HDL Code生成测试序列、通过FFT分析工具监控THD值等,进一步提高了仿真的准确性和实用性。

    电力电子领域中图腾柱PFC抖频技术与逃逸检测窗优化EMC性能

    内容概要:本文详细介绍了针对图腾柱PFC(Power Factor Correction)电路的抖频技术和逃逸检测窗机制,旨在解决传统PFC电路因固定开关频率导致的电磁兼容性(EMC)问题。文中通过具体的伪代码展示了抖频算法的实现方法,如基于正弦表的频率抖动和伪随机序列生成,以及逃逸检测窗的时间窗过滤器设计。此外,还讨论了硬件层面的改进措施,如在驱动电阻上并联电容以分散开关振铃的能量。最终,经过一系列优化,EMC测试通过率显著提高,特别是在30MHz-1GHz频段的余量超过了6dB。 适合人群:从事电力电子设计、EMC测试及相关领域的工程师和技术人员。 使用场景及目标:适用于需要优化PFC电路EMC性能的场合,尤其是希望减少EMI(Electromagnetic Interference)干扰、提高产品合格率的研发团队。目标是通过抖频技术和逃逸检测窗机制,确保产品能够顺利通过严格的EMC测试。 其他说明:文中提到的具体参数和代码片段为伪代码,实际应用时需根据具体情况进行调整。同时,文中强调了调试过程中的一些关键经验,如抖频范围的选择和逃逸检测窗的时间窗口设定,这些都是成功实施该技术的关键因素。

    扫地机器人路径规划:深度优先搜索与随机碰撞算法的应用与比较

    内容概要:本文详细介绍了扫地机器人的路径规划方法,重点讨论了深度优先搜索(DFS)和随机碰撞两种算法。DFS算法通过系统地遍历每个节点,确保全面覆盖,适用于高效清洁;而随机碰撞算法则依赖随机性进行移动,适合应对动态环境。文中提供了这两种算法的具体实现代码,并对其优缺点进行了对比分析。此外,还探讨了实际应用中的挑战,如栅格离散化误差、物理惯性和动态障碍物的影响,以及混合使用两种算法的可能性。 适合人群:对机器人路径规划感兴趣的开发者和技术爱好者,特别是从事智能家居设备研究的专业人士。 使用场景及目标:帮助读者理解扫地机器人路径规划的基本原理,掌握DFS和随机碰撞算法的实现方式及其应用场景,从而能够应用于实际产品开发中。 其他说明:文章强调了路径覆盖率并不等于清洁效果,指出物理清洁部件的设计同样重要。同时提醒读者注意算法的实际部署问题,如防震荡机制和陀螺仪数据的结合。

    电机控制领域本杰明磁链模型的闭环带载启动与代码优化实践

    内容概要:本文详细介绍了本杰明磁链模型在电机控制领域的应用,特别是在闭环带载启动方面的优势。文章首先展示了磁链模型的核心参数初始化及其精确性要求,接着深入探讨了磁链观测器的设计与实现,包括其微分方程、积分器以及遗忘因子的作用。文中还讨论了代码生成过程中遇到的问题及解决方案,如MATLAB生成代码的效率优化和查表法的应用。此外,文章介绍了带载启动的具体策略,包括转速-电流双闭环嵌套控制和滑模控制器的应用,并分享了实际测试数据和效果。最后,文章提供了调试经验和实战案例,强调了模型的鲁棒性和实用性。 适合人群:从事电机控制系统设计与开发的工程师和技术人员,尤其是关注高性能带载启动解决方案的专业人士。 使用场景及目标:适用于需要提高电机启动可靠性和稳定性的应用场景,如工业自动化设备、物流AGV等。目标是通过引入本杰明磁链模型,实现高效稳定的带载启动,减少启动时的电流波动和机械振动。 其他说明:本文不仅提供了理论分析,还包括大量实际代码示例和调试技巧,帮助读者更好地理解和应用这一先进技术。

Global site tag (gtag.js) - Google Analytics