优化WebLogic一、为WebLogic启动设置Java参数垃圾收集(GC)是指JVM释放Java堆中不再使用的对象所占用的内存的过程,而Java堆(Heap)是指Java应用程序对象生存的空间。堆大小决定了GC的频度和时间。堆越大,GC频度低,速度慢。堆越小,GC频度高,速度快。所以GC和堆大小是一组矛盾。为了获取理想的Heap堆大小,需要使用-verbosegc参数(Sunjdk:-Xloggc:file)以打开详细的GC输出。分析GC的频度和时间,结合应用最大负载所需内存情况,得出堆的大小。通常情况下,我们建议使用可用内存(除操作系统和其他应用程序占用之外的内存)70-80%,为避免堆大小调整引起的开销,设置内存堆的最小值等于最大值即:-Xms=-Xmx。而为了防止内存溢出,建议在生产环境堆大小至少为256M(Platform至少512M),实际环境中512M~1G左右性能最佳,2G以上是不可取的,在调整内存时可能需要调整核心参数进程的允许最大内存数。对于sun和hp的jvm,永久域太小(默认4M)也可能造成内存溢出,应增加参-XX:MaxPermSize=128m。建议设置临时域-Xmn的大小为-Xmx的1/4~1/3,SurvivorRatio为8堆栈内存优化,修改配置文件:WL_HOME=C:\bea\weblogic81%WL_HOME%\common\bin\commEnv.cmd:bea#如果采用的上bea的JDK#JVMHeap(堆内存)最小尺寸为96M,最大尺寸为256MsetMEM_ARGS=-Xms96m-Xmx256m:sun#如果采用的是sun的JDK#JVMHeap(堆内存)最小尺寸为32M,最大尺寸为200M#公共变量对象的内存限制:PermSize:最小尺寸,MaxPermSize:最大允许分配尺寸setMEM_ARGS=-Xms32m-Xmx200m-XX:MaxPermSize=128m监视堆栈使用情况:下载JRockitJDK,该JDK已经自带了JRockitMissionControl工具,目前好像还没有单独下载JRockitMissionControl的地方,于JRockitJDK进行了绑定下载;在C:\bea\jrockit81sp5_142_08\console目录里面运行:C:\bea\jrockit81sp5_142_08\bin\java–Xmanagement-jarManagementConsole.jar如何监控weblogic呢?修改weblogic启动脚本startWebLogic.cmd,在里面加入-Xmanagement启动参数:%JAVA_HOME%\bin\java-Xmanagement%JAVA_VM%%MEM_ARGS%%JAVA_OPTIONS%-Dweblogic.Name=%SERVER_NAME%-Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE%-Djava.security.policy=%WL_HOME%\server\lib\weblogic.policyweblogic.Server二、设置与性能有关的配置参数在一个WebLogic域中,配置文件(config.xml)位于与管理服务器通信的机器里,提供WebLogicMBean的长期存储。管理服务器作为连接的中心点,为服务实例与系统管理工具提供服务。域也可以包括其他的WebLogic实例,称之为从服务,主要为应用程序提供服务。当启动管理服务器时,首先读域配置文件,然后跳过建立在配置文件中管理MBean默认的属性值,每一次用系统管理工具(不管是命令行界面还是管理控制台)改变一个属性值,它都会被存到相应的管理MBean,并且写进配置文件。1.下表列出了影响服务器性能的参数。名称参数位置作用高速缓存max-beans-in-cacheweblogic-ejb-jar.xml实体bean缓存空间的大小,如果缓存的空间太小,有些bean就被滞留在数据库中,下次调用时就必须重新从数据库装载%JAVA_HOME%\bin\java-hotspot-Xms512m-Xmx512m-classpath%CLASSPATH%-startWLS.cmd/startWLS.sh为得到高性能的吞吐量,把Java堆的最小值与最大值设为相等。2.console控制台中的参数名称类型位置值NativeIOEnabledservermydomain-Servers-myserver-Configuration-Tuning-“EnableNativeIO”TRUE,表示该Server使用本地I/OSocketReadersserver—configuration-tuning设置在执行线程中专用做SocketReaders的百分比MaximumOpenSockets最大打开Socket数StuckThreadMaxTime堵塞线程时间,超过这个时间没有返回的执行线程,系统将认为是堵塞线程如果weblogic认为某个队列中的所有的线程全部堵塞的话,weblogic将会增加执行线程的数量。注意:执行线程的数量一旦增加,目前weblogic不会去减少他,如果增加了一些线程以后再次出现overflow的警告,weblogic会继续增加执行线程的数量,一直到达到上限为止。StuckThreadTimerInterval系统检查堵塞线程的时间间隔LowMemoryGCThreshold当可用内存小于该百分比时,垃圾回收启动LowMemoryGranularityLevel当两次检测的可用内存变化超过该百分比时,垃圾回收启动LowMemorySampleSize在一次检测中的取样次数LowMemoryTimeInterval检测间隔时间AcceptBacklog等待队列中最多可以有多少TCP连接等待处理,如果在许多客户端连接被拒绝,而在服务器端没有错误显示,说明该值设得过低。如果连接时收到connectionrefused消息,说明应提高该值,每次增加25%ThreadCountExecuteQueueconsole:mydomain-Servers-myserver-Monitoring-MonitorallActiveQueues...-Configuration-weblogic.kernel.Default-服务器初始创建的执行线程的数量,设置原则:增大机器的最大并发线程数使处理器利用率达到最大。对于服务器端操作比较多的线程,应该减少线程计数;对于客户端操作比较多的,应该增加线程计数。并发线程数理论上等于“本地主机CPU个数+Stuck线程数”,够用即可,过大会降低系统性能QueueLength在等待队列里的请求数,理想状态下是0QueueLengthThresholdPercent一个百分数,当request的数量达到队列长度的这个比例的时候,weblogic会发出overflow的标志信息ThreadsIncrease如果weblogic发出overflow的标志信息,weblogic会尝试增加这个数量的执行线程,以解决处理矛盾ThreadsMaximum最大执行线程数ThreadsMinimum最小执行线程数ThreadPriority线程优先级InitialCapacityJDBCmydomain-JDBCConnectionPools-Configuration-Connections初始数据库物理连接数MaxCapacity最大数据库物理连接数CapacityIncrement每次数据库物理连接增加数StatementCacheTypepreparedstatements缓存的策略,LRU算法在有新的语句到来时,将最不经常被用得语句调整出缓存。FIXED算法为先进先出的算法TestConnectionsOnReserveTestConnectionsOnReserve设置为false(缺省设置)。如果此参数设置为真(true),则在连接被分配给调用者之前,都要经过测试,这会额外要求与数据库的反复连接StatementCacheSize宏语句设定的静态缓存,大小由JDBC连接池配置时指定,调整这个数值的大小,有利于提高系统的效率LoginDelay创建数据库物理连接时的延时时间、三、调整开发模式与产品模式默认值你可以指定域为开发环境或为产品环境。WebLogic会根据你指定的环境类型使用不同的默认值提供不同的服务。下表列出了两种模式下的默认值优化参数开发模式产品模式mydomainServersmyserverExecuteQueueweblogic.kernel.Default中ThreadCount15threads25threadsmydomainJDBCConnectionPoolsMyJDBCConnectionPool-Connections中MaximumCapacity15connections25connections3.1更改运行时模式在创建了一个域后,按下列步骤可以更改域里所有服务的的运行时模式:1.为更改运行在一个WebLogic主机上的所有域的运行时模式,用文本编辑器打开WL_HOME\common\bin\commEnv.cmd(Windows)或者WL_HOME\common\bin\commEnv.sh(UNIX),WL_HOME是安装WebLogic的路径。为指定的域更改运行时模式,就用文本编辑器打开domain-name\StartWebLogic.cmd(Windows)ordomain-name\StartWebLogic.sh(UNIX),domain-name为创建的域的目录。2.在这个脚本中,更改PRODUCTION_MODE的值,如果你要服务器运行在产品模式,指定其值为TRUE。或者在mydomain-General里面把ProductionMode选中更改为产品模式时,并且把boot.properties(存放着username和password)文件删掉,那么启动时就需要输入用户名和密码。3.重启所有的服务器。3.2两种模式的不同下表列出了开发模式与产品模式几种关键项的区别:功用名称开发模式产品模式SSL你可以使用WebLogic安全服务提供的验证数字证书。有这些证书,你开发的应用程序会在SSL保护的环境下运行。如果你使用验证数字证书,会收到警告信息。部署应用程序WEBLOGIC实例会自动部署和更新位于domain_name/applications目录下的应用程序(domain_name为域的名称)。不能使用自动部署功能,必须使用WebLogic控制台或者WebLogiceblogicDeployer工具。LogFileRotation启动服务器后,服务器自动重命名本地日志文件为server-name.log.n,为了滞留的session,只要日志文件的达到500kb,日志文件就会滚转一次。当日志文件达到500kb,就会滚转。ExecuteQueues默认的执行线程为15。默认的执行线程为25。JDBCConnectionPoolCapacity默认的容量为15。默认的容量为25。四、使用WebLogic“自有的IO”性能包当你使用自有的性能包,测试基准就表明了主要性能的提高。性能包采用最优化的平台及多线程的Socket去提高服务器的性能。例如,本地Socket读的多线程有自己的执行队列而不需要借用默认的执行队列线程,这样可以让默认执行线程很从容去处理应用程序。不过,如果你一定要用纯Javasocket读在主机上运行,你仍然可以通过配置每个服务器实例和客户机中适当的socket读的线程数量,来提高socket通信的性能。设置性能包的操作方法:默认情况下,装载在config.xml中的是自有的性能包。为了验证这个设置,在配置文件中检查Na