Weblogic 性能调优实战
weblogic线程快照threaddump分析
Java 的线程线程是指能独立于程序的其它部分运行的执行单元。
JAVA语言能够很好的实现多线程的程序。
我们在调试程序,或者在开发后期需要做性能调优的时候,往往也需要了解当前程序正在运行的线程的状态,正在执行的操作,从而分析系统可能存在的问题。
在阅读本文之间,应对Java线程的编程原理,同步机制有一定了解.产生JAVA线程dumpJAVA 的线程DUMP,就象当前JAVA进程的一个快照,打印出所有线程的状态和调用堆栈,以及Monitor的状态。
在不同的操作系统下,产生线程DUMP的方式是不同的。
在启动程序的控制台里敲:Ctrl - Break,线程的dump会产生在标准输出中(缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件)。
在unix,linux 和MacOS 环境中,在控制台中敲:Ctrl-\,或者,用“kill -3 <pid>” ,或者“kill –QUIT <pid>”。
Pid是用所关注的JAVA进程号,您可以用“ps -ef | grep j ava” 找到,或者使用JDK 5.0中的“jps -v” 命令获得。
在各个操作系统平台,都可以用JDK 5.0工具包中的jstack <pid>这里要注意的是:1. 不同的JAVA虚机的线程DUMP的创建方法和文件格式是不一样的,不同的JVM版本,dump信息也有差别。
本文中,只以SUN的hotspot JVM 5.0_06 为例。
2. 在实际运行中,往往一次dump的信息,还不足以确认问题。
建议产生三次dump信息,如果每次dump都指向同一个问题,我们才确定问题的典型性。
线程分析:1. JVM 线程在线程中,有一些JVM内部的后台线程,来执行譬如垃圾回收,或者低内存的检测等等任务,这些线程往往在JVM初始化的时候就存在,如下所示:"Low Memory Detector" daemon prio=10 tid=0x081465f8 nid=0x7 runnable [0x00000000..0x00000000]"CompilerThread0" daemon prio=10 tid=0x08143c58 nid=0x6 waiting on condition [0x00000000..0xfb5fd798]"Signal Dispatcher" daemon prio=10 tid=0x08142f08 nid=0x5 waiting on condition [0x00000000..0x00000000]"Finalizer" daemon prio=10 tid=0x08137ca0 nid=0x4 in Object.wait() [0xfbeed000..0xfbeeddb8]at ng.Object.wait(Native Method)- waiting on <0xef600848> (a ng.ref.ReferenceQueue$Lock)at ng.ref.ReferenceQueue.remove(ReferenceQueue.java:116)- locked <0xef600848> (a ng.ref.ReferenceQueue$Lock)at ng.ref.ReferenceQueue.remove(ReferenceQueue.java:132)at ng.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)"Reference Handler" daemon prio=10 tid=0x081370f0 nid=0x3 in Object.wait() [0xfbf4a000..0xfbf4aa38]at ng.Object.wait(Native Method)- waiting on <0xef600758> (a ng.ref.Reference$Lock)at ng.Object.wait(Object.java:474)at ng.ref.Reference$ReferenceHandler.run(Reference.java:116)- locked <0xef600758> (a ng.ref.Reference$Lock)"VM Thread" prio=10 tid=0x08134878 nid=0x2 runnable"VM Periodic Task Thread" prio=10 tid=0x08147768 nid=0x8 waiting on condition 我们更多的是要观察用户级别的线程,如下所示:"Thread-1" prio=10 tid=0x08223860 nid=0xa waiting on condition [0xef47a000..0xef47ac38]at ng.Thread.sleep(Native Method)at testthread.MySleepingThread.method2(MySleepingThread.java:53)- locked <0xef63d600> (a testthread.MySleepingThread)at testthread.MySleepingThread.run(MySleepingThread.java:35)at ng.Thread.run(Thread.java:595)我们能看到:线程的状态:waiting on condition线程的调用栈线程的当前锁住的资源:<0xef63d600> 这些信息对我们随后的分析都有用处。
(完整版)系统性能调优方案
第1章系统性能调优方案1.1系统的性能扩展模型介绍在进行性能指标设计工作前,必须从理论上对性能指标的可实现性进行分析。
理论上,系统的扩展模型可以分成两类,系统可扩展模型和不可扩展模型,如下图所示:两种性能扩展模型以上左图代表了系统随着并发用户量的增加系统响应时间呈现线性增长的趋势,是一种可扩展的情况;但对于系统右边的方式则是不可扩展的,它将随着用户数量的增大而响应时间大大急剧增加,这种模型是完全不可控制的。
通过系统压力实验,我们发现,即使是遵循可扩展模型设计的系统的响应性能和并发用户量并不能成永远的线性关系,在系统压力超过一定的值之后,如100并发,系统响应时间增加非常快,我们把这个点称为拐点.在拐点以下,系统性能呈现良好的线性特性,在拐点以上,则呈现出非线性的特征,同时CPU和内存出现相当大的增长,甚至100%占用。
这种现象的出现,说明系统的性能不仅仅取决于软件系统,而也同时取决于承载系统的硬件基础环境,如计算能力和内存大小.为此,系统性能设计的目的就是为系统设置合理的拐点并发值,而不可能无限制的追求无限大的并发下系统响应仍旧呈现线形特征。
1.2对响应时间的技术保障手段金税三期工程第二阶段河南地税建设项目财务管理子系统对系统的性能要求是比较高的,为了满足这个要求,在系统实现上必须要采用一系列的技术措施才能达到,具体来说将采用下面方式进行:1、预处理技术的应用预处理技术是一种在预定计划上由系统激发主动执行的计算模式,它对于一些处理内容固定,处理方式固定的功能非常有效,通过提前处理,实现数据生成时间和数据访问时间的隔离,在数据访问的时候不再需要为拿到结果而执行任何的计算,只需要简单的查询结果即可,这样可以大大增强系统的访问性能,有效的利用系统闲置时间.2、变动态内容查找为静态数据访问一些情况下,经过各种调优手段仍不能满足要求,就需要将一些动态的内容进行静态化处理,如可以将复杂的动态报表转化成HTML网页并发布在WEB服务器上,这种方式可以大大减轻应用服务器的访问压力,进一步减少用户等待的时间.例如,对一段历史时期的数据的汇总报表结果的查询,复杂报表结果等查询。
OracleWeblogic11g基础知识
主要特点
支持多种编程语 言和框架
WebLogic Server 11g 支持 Java EE 和 SOA 标准,以及多种流行的 编程语言和框架,如 Java、JSP、Servlets、 EJB、JMS、JAX-WS 等。
集成开发环境 (IDE)
高可用性和可伸 缩性
WebLogic Server 11g 提供了一个集成的开发 环境(IDE),支持从设 计到部署的全过程开发, 包括代码编辑、调试、 测试和部署等。
WebLogic Server 11g 支持高可用性和可伸缩 性,通过集群和负载均 衡技术,提供对关键业 务应用的保护,确保应 用程序的可靠性和性能 。
指导用户如何配置审计和日志功能,以便于监控和安全分析。
安全策略配置
指导用户如何配置安全策略,包括 IP 限制、URL 过滤等。
安全漏洞与防护
1 2
常见安全漏洞
介绍 WebLogic Server 11g 中常见的安全漏洞, 如跨站脚本攻击(XSS)、SQL 注入等。
安全补丁
及时发布安全补丁,修复已知的安全漏洞,提高 系统的安全性。
ABCD
VisualVM:用于监控 Java应用程序的内存、线 程和CPU使用情况。
AWR报告:Oracle自动 工作负载仓库报告,提供 数据库性能的详细分析和 诊断。
性能优化案例
案例一
某银行核心业务系统在高峰期出现性 能瓶颈,通过调整JVM参数和 WebLogic参数,成功提高了系统响 应速度和吞吐量。
3
安全加固
通过配置安全策略、限制访问权限等措施,加固 系统的安全性,防止潜在的安全威胁。
Weblogic中间件运维经验汇总
Weblogic中间件运维经验汇总目录关于Weblogic参数调优的运维经验 (2)Weblogic性能调优的处理方法 (5)关于输电项目Weblogic安装的运维经验 (8)Weblogic回收数据库连接数配置的方法 (14)在Apache和Weblogic中分别部署静态页面的方法 (17)Weblogic Server性能调优经验 (20)WeblogicJVM堆参数设置方法 (24)关于Weblogic参数调优的运维经验报送单位:北京公司审核人:类型:业务应用关键字:GC垃圾回收1、引言为了提高维护人员运维水平,以集中与分享日常运行维护经验为目的,现进行典型经验的编制。
2、现象描述部分应用服务器出现宕机现象,在F5上查看时已经掉出集群状态。
3、处理过程停止宕机应用服务器上的Weblogic进程。
/home/weblogic/bea/user_projects/domains/pms/bin/setDomainEn v.sh文件中的启动内存大小并添加垃圾回收机制,修改后如下:MEM_ARGS="-Xms5248m -Xmx5248m -Xmn1536m-XX:SurvivorRatio=6-XX:+UseParNewGC-XX:+UseConcMarkSweepGC-XX:CMSFullGCsBeforeCompaction=20-XX:+UseFastAccessorMethods-XX:+AggressiveOpts"3、修改完成后重启Weblogic服务。
4、原因分析在收到报警信息后,对后台日志进行查看,报错信息如下:Exception in thread "CBM_正常处理任务线程" ng.OutOfMemoryError: Java heap spaceatoracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.ja va:868)atoracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatem ent.java:1045)atoracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPre paredStatement.java:839)atoracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatem ent.java:1132)atoracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePrepa redStatement.java:3316)atoracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3361)经过对报错日志分析,状态检修的CBM处理进程内存溢出报错,导致服务器宕机。
WebLogic的日常操作和监控
WebLogic的启动
• Admin Server的启动
• startWebLogic.cmd/sh • 在Unix或Linux中为了在telnet退出后让WebLogic继续运行,需要使用 nohup和&符来调用启动命令:nohup ./startWebLogic.sh & • WebLogic的标准输出和标准出错信息会纪录在nohup.out文件中
WebLogic Server的停止- console方式
WebLogic Server的停止- 脚本方式
• Admin Server停止
• ./stopWebLogic.cmd/sh username password
• Managed Server停止
• ./stopManagedWebLogic.cmd/sh <servername> <t3://adminip:adminport> username password
在这条日志信息中,它们的格式是: 时间戳,错误级别,子系统 ,机器名,Server名称,线程号,用户号,事务号,.. 信息号 ,文本信息。 如果这信息包括跟踪堆栈的信息,这些信息将紧跟在这条信息 后面。
如何去分析日志
日志中出现错误,如何去请求帮助
如果日志中出现错误,您可以到BEA网站去查询相关 的错误信息和解决办法,如找不到,可以通过以下途径寻求帮助。
• 范围不同,信息内容也不同
• 涉及Domain范围内的日志写入Domain log(如Cluster,RMI 通讯等信息)
• Domain Log Filter
• 个或多个server按过滤条件过滤后的一些错误信息才传递给 Domain log
• 常见的错误也不同
weblogic优化指南
优化WebLogic一、为WebLogic启动设置Java参数垃圾收集(GC)是指JVM释放Java堆中不再使用的对象所占用的内存的过程,而Java堆(Heap)是指Java应用程序对象生存的空间。
堆大小决定了GC的频度和时间。
堆越大,GC频度低,速度慢。
堆越小,GC频度高,速度快。
所以GC和堆大小是一组矛盾。
为了获取理想的Heap堆大小,需要使用-verbosegc参数(Sun jdk: -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# JVM Heap(堆内存)最小尺寸为96M,最大尺寸为256Mset MEM_ARGS=-Xms96m -Xmx256m:sun#如果采用的是sun的JDK# JVM Heap(堆内存)最小尺寸为32M,最大尺寸为200M#公共变量对象的内存限制: PermSize:最小尺寸, MaxPermSize :最大允许分配尺寸set MEM_ARGS=-Xms32m -Xmx200m -XX:MaxPermSize=128m监视堆栈使用情况:下载JRockit JDK,该JDK已经自带了JRockit Mission Control工具,目前好像还没有单独下载JRockit Mission Control的地方,于JRockit JDK进行了绑定下载;在C:\bea\jrockit81sp5_142_08\console目录里面运行:C:\bea\jrockit81sp5_142_08\bin\java –Xmanagement -jar ManagementConsole.jar 如何监控weblogic呢?修改weblogic启动脚本startWebLogic.cmd,在里面加入-Xmanagement启动参数:%JAVA_HOME%\bin\java -Xmanagement %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% =%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server二、设置与性能有关的配置参数在一个WebLogic域中,配置文件(config.xml)位于与管理服务器通信的机器里,提供WebLogic MBean的长期存储。
weblogic调优参数及监控指标
weblogic调优参数对Weblogic的调优主要从SEVER、ExecuteQueue、JDBC等几个方面的相关参数进行调优:一、SERVER在mydomain->Servers->myserver->Configuration->Tuning->“Enable Native IO”中: 1、Native IOEnabledTRUE,表示该Server使用本地I/O2、SocketReaders设置在执行线程中专用做Socket Readers的百分比3、Maximum Open Sockets最大打开Socket数4、Stuck Thread MaxTime堵塞线程时间,超过这个时间没有返回的执行线程,系统将认为是堵塞线程如果weblogic认为某个队列中的所有的线程全部堵塞的话,weblogic将会增加执行线程的数量。
注意:执行线程的数量一旦增加,目前weblogic不会去减少他,如果增加了一些线程以后再次出现overflow的警告,weblogic会继续增加执行线程的数量,一直到达到上限为止。
5、Stuck Thread Timer Interval系统检查堵塞线程的时间间隔6、Low Memory GC Threshold当可用内存小于该百分比时,垃圾回收启动7、Low Memory Granularity Level当两次检测的可用内存变化超过该百分比时,垃圾回收启动8、Low Memory Sample Size在一次检测中的取样次数9、Low Memory Time Interval检测间隔时间10、Accept Backlog等待队列中最多可以有多少TCP连接等待处理,如果在许多客户端连接被拒绝,而在服务器端没有错误显示,说明该值设得过低。
如果连接时收到connection refused消息,说明应提高该值,每次增加25%二、ExecuteQueue在mydomain->Servers->myserver ->Monitoring->Monitor all Active Queues... ->Configuration->weblogic.kernel.Default->1、ThreadCount服务器初始创建的执行线程的数量,设置原则:增大机器的最大并发线程数使处理器利用率达到最大。
WEBLOGIC性能参数
WEBLOGIC性能参数MessagesLogged –该weblogic服务器实例产生的日志消息总数Number of total log messages generated by this instance of the weblogic server.Registered - 如果已取消注册由该对象表示的MBean,则返回falseReturns false if the MBean represented by this object has been unregistered.CachingDisabled - 禁用代理中的缓存的专用属性Private property that disables caching in proxies.ServerRuntimeSocketsOpenedTotalCount - 返回本服务器上登记的socket的总数Return the total number of registrations for socket muxing on this sever.Registered - 如果已取消注册由该对象表示的MBean,则返回falseReturns false if the MBean represented by this object has been unregistered.ActivationTime –返回服务器激活时间Return the time when the server was started.CachingDisabled -禁用代理中的缓存的专用属性Private property that disables caching in proxies.OpenSocketsCurrentCount –返回本服务器上当前登记的socket数Return the current number sockets registered for socket muxing on this server.AdminServerListenPort –返回管理服务器监听的端口Return the port on which admin server is listening for connections.RestartsTotalCount –返回自群集上次激活后本服务器重启的总次数Return the total number of restarts for this server since the cluster was last activated.ListenPort –返回当前服务器监听连接的端口Return the port on which this server is listening for connections.ServletRuntimeExecutionTimeAverage –返回所有servlet自被创建后被调用的平均数Returns the average amount of time all invocations of the servlet have executed since created.CachingDisabled - 禁用代理中的缓存的专用属性Private property that disables caching in proxies.Registered - 如果已取消注册由该对象表示的MBean,则返回falseReturns false if the MBean represented by this object has been unregistered.ExecutionTimeHigh –返回servlet自创建后耗时最长的一个交易调用的时间Returns the amount of time the single longest invocation of the servlet has executed since created.ReloadTotalCount –返回servlet被重载总次数Returns the total number of times the servlet has been reloaded.PoolMaxCapacity –返回单线程模式下servlet的最大能力Returns the maximum capacity of this servlet for single thread model servlets.InvocationTotalCount –返回servlet被调用的总次数Returns the total number of times the servlet has been invoked.ExecutionTimeLow –返回servlet自创建后单次最短调用消耗的时间Returns the amount of time the single shortest invocation of the servlet has executed since created. Note that for the CounterMonitor, the difference option must be used.ExecutionTimeTotal –返回servlet自被创建后所有被调用的总时间数Returns the amount of time all invocations of the servlet has executed since created. WebAppComponentRuntimeSessionsOpenedTotalCount –返回该服务器上打开的会话总数Returns the total number of sessions opened in this server.CachingDisabled - 禁用代理中的缓存的专用属性Private property that disables caching in proxies.Registered - 如果已取消注册由该对象表示的MBean,则返回falseReturns false if the MBean represented by this object has been unregistered.OpenSessionsHighCount –返回本服务器上打开会话总数的最大值Returns the high water mark of the total number of open sessions in this server. The count starts at zero each time the server is activated. Note that this is an optimization method for a highly useful statistic that could be implemented less efficiently using change notification.OpenSessionsCurrentCount –返回当前component打开的会话总数Returns the current total number of open sessions in this component. EJBStatefulHomeRuntimeStateless –如果mbean代表无状态会话bean,返回true,否则返回false。
WebLogic服务器负载均衡解决方案
WebLogic服务器负载均衡解决方案WebLogic是一个用于构建和部署企业级Java应用程序的Java EE服务器。
负载均衡是一个关键的解决方案,用于在WebLogic服务器集群中分配和管理应用程序请求的负载。
本文将探讨WebLogic服务器负载均衡的几种解决方案。
1. 硬件负载均衡器:硬件负载均衡器是一种专门设计用于分发网络流量的设备。
它可以将传入的请求分发到WebLogic服务器集群中的不同节点上,以平衡负载。
硬件负载均衡器可以基于不同的算法进行负载分发,如轮询、最少连接数和源IP散列。
这种解决方案的优势在于具有高性能和可扩展性,可以处理大量的并发请求。
2. Web服务器负载均衡:Web服务器负载均衡是一种基于软件的解决方案,通过在Web服务器前面放置一个负载均衡器来实现。
负载均衡器可以根据预先定义的规则将请求转发到不同的WebLogic服务器节点上。
常用的Web服务器负载均衡软件包括Apache HTTP Server和NGINX。
这种解决方案相对简单且成本较低,但可能存在性能瓶颈。
3. WebLogic集群:WebLogic服务器可以配置为运行在集群模式下,以实现负载均衡。
集群是一组相互联网的WebLogic服务器节点,它们共享相同的应用程序和数据存储。
WebLogic集群可以通过多种方式进行负载均衡,包括轮询、就近路由和会话粘性。
这种解决方案的优势在于无需额外的硬件或软件,直接使用WebLogic服务器自带的功能。
4. 云负载均衡:如果将WebLogic服务器部署在云环境中,可以使用云提供商的负载均衡服务。
云负载均衡器可以自动分配和管理负载,并提供高可用性和可扩展性。
云负载均衡器通常基于虚拟IP地址和域名进行配置,并支持不同的负载均衡算法。
5. 基于DNS的负载均衡:DNS解析器可以根据特定的策略将域名解析为不同的IP地址。
通过配置多个WebLogic服务器的IP地址,可以使用DNS负载均衡来平衡流量。
weblogic 优化
优化WebLogic 服务器性能参数WebLogic 配置文件(config.xml)包含了大量很直观的与性能有关的参数,能通过配置环境与应用程序得到很好的优化。
基于系统的需要调整这些参数不仅能改善单个点的性能,而且能提高整个应用程序性能的可衡量性。
试着采用下列WebLogic配置方法,或许能使你的系统达到最佳状态:一修改运行队列线程数的值。
在WebLogic 中队列元素的线程数等于同时占用运行队列的应用程序的数目。
当任务加入一个WebLogic 实例,它就被放到执行队列中,然后分配给任务一个线程来运行。
线程消耗资源,因此要小心处理这个属性——增加不需要的值,会降低性能。
二,如果可能,使用自带的性能包(NativeIOEnabled=true)。
三,使用特定的应用程序执行队列。
四,使用JDBC连接池时,修改下列属性:n 驱动名称:使用小的驱动或者jDriver。
n 初始容量:设为与最大容量相同的值。
n 最大容量:其值至少应与线程数相同。
五,把连接池的大小设为与执行队列的线程数相同。
六,设置缓冲。
七,为Servlet和JSP使用多个执行队列。
八,改变JSP默认的Java编译器,javac 比jikes或sj要慢。
优化WebLogic提要:n 为WebLogic 启动设置Java 参数。
n 设置与性能有关的配置参数。
n 调整开发与产品模式默认值。
n 使用WebLogic “自有的IO ”性能包。
n 优化默认执行队列线程。
n 优化连接缓存。
n 如何提高JDBC 连接池的性能。
n 设置Java 编译器。
n 使用WebLogic 集群提高性能。
n 监视WebLogic 域。
一、为WebLogic 启动设置Java 参数只要启动WebLogic ,就必须指定Java 参数,简单来说,通过WebLogic.Server 域的命令行就可以完成,不过,由于这样启动的过程冗长并且易于出错,BEA 公司推荐你把这个命令写进脚本里。
weblogic启动内存配置[最新]
Weblogic 启动内存配置1、找到配置文件位置,默认路径是wlserver_10.3/common/bin/commEnv.sh2、找到commEnv.sh文件,修改此配置文件if [ "$PRODUCTION_MODE" = "true" ]; thencase $JA V A_VENDOR inBEA)JA V A_VM=-jrockitMEM_ARGS="-Xms512m -Xmx2048m";;HP)JA V A_VM=-serverMEM_ARGS="-Xms512m -Xmx2048m -XX:MaxPermSize=512m";;IBM)JA V A_VM=MEM_ARGS="-Xms512m -Xmx2048m";;Sun)JA V A_VM=-serverMEM_ARGS="-Xms512m -Xmx2048m -XX:MaxPermSize=512m";;*)JA V A_VM=MEM_ARGS="-Xms512m -Xmx2048m";;esacelsecase $JA V A_VENDOR inBEA)JA V A_VM=-jrockitMEM_ARGS="-Xms512m -Xmx2048m"JA V A_OPTIONS="${JA V A_OPTIONS} -Xverify:none";;HP)JA V A_VM=-clientMEM_ARGS="-Xms512m -Xmx2048m -XX:MaxPermSize=512m";;IBM)JA V A_VM=MEM_ARGS="-Xms512m -Xmx2048m";;Sun)JA V A_VM=-clientMEM_ARGS="-Xms512m -Xmx2048m -XX:MaxPermSize=512m"JA V A_OPTIONS="${JA V A_OPTIONS} -Xverify:none";;*)JA V A_VM=MEM_ARGS="-Xms512m -Xmx2048m";;红色标注的位置是启动时分配的内存大小,可根据实际需求进行调整。
weblogic内存调整方法方法
打开域下面的bin目录(D:\Oracle\Middleware\user_projects\domains\base_domain\bin)。
编辑setDomainEnv.cmd文件,将以下蓝色的地方设置内存大小改成自己需要的。
set WLS_HOME=%WL_HOME%\serverif "%JA V A_VENDOR%"=="Sun" (set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512mset WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m) else (set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512mset WLS_MEM_ARGS_32BIT=-Xms512m -Xmx512m)set MEM_ARGS_64BIT=%WLS_MEM_ARGS_64BIT%set MEM_ARGS_32BIT=%WLS_MEM_ARGS_32BIT%if "%JA V A_USE_64BIT%"=="true" (set MEM_ARGS=%MEM_ARGS_64BIT%) else (set MEM_ARGS=%MEM_ARGS_32BIT%)set MEM_PERM_SIZE_64BIT=-XX:PermSize=128mset MEM_PERM_SIZE_32BIT=-XX:PermSize=48mif "%JA V A_USE_64BIT%"=="true" (set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%) else (set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%)set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256mset MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m我的修改后如下:set WLS_HOME=%WL_HOME%\serverif "%JA V A_VENDOR%"=="Sun" (set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512mset WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m) else (set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512mset WLS_MEM_ARGS_32BIT=-Xms512m -Xmx512m)set MEM_ARGS_64BIT=%WLS_MEM_ARGS_64BIT%set MEM_ARGS_32BIT=%WLS_MEM_ARGS_32BIT%if "%JA V A_USE_64BIT%"=="true" (set MEM_ARGS=%MEM_ARGS_64BIT%) else (set MEM_ARGS=%MEM_ARGS_32BIT%)set MEM_PERM_SIZE_64BIT=-XX:PermSize=128mset MEM_PERM_SIZE_32BIT=-XX:PermSize=512mif "%JA V A_USE_64BIT%"=="true" (set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%) else (set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%)set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256mset MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=1024m在D:\Oracle\Middleware\wlserver_10.3\common\bin\commEnv.sh中配置MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"-Xms:内存初始值 -Xmx:内存最大值(不要超过内存的80%)MaxPermSize:PermGen(Class和Meta存放区域)区域内存最大值。
weblogic常用操作
weblogic常用操作以下是一些常见的WebLogic操作:1. 启动和停止WebLogic服务器:可以使用启动脚本(startWebLogic.sh或startWebLogic.cmd)来启动WebLogic服务器,并使用停止脚本(stopWebLogic.sh或stopWebLogic.cmd)来停止服务器。
2. 部署应用程序:可以使用WebLogic控制台或weblogic.Deployer工具来部署应用程序。
在控制台中,可以选择应用程序并上传应用程序文件,然后将其部署到指定的目标服务器。
对于weblogic.Deployer工具,可以使用命令行参数来指定要部署的应用程序文件和目标服务器。
3. 配置JDBC数据源:可以使用WebLogic控制台来配置JDBC数据源。
在控制台中,可以指定数据库连接信息、连接池属性和目标服务器等。
4. 配置JMS队列和主题:可以使用WebLogic控制台来配置JMS队列和主题。
在控制台中,可以指定队列和主题的名称、目标服务器和持久性等。
5. 监视服务器状态:可以使用WebLogic控制台或WebLogic管理器来监视服务器的状态。
可以查看服务器日志、线程池使用情况、JVM堆使用情况以及应用程序性能指标等。
6. 配置安全性:可以使用WebLogic控制台来配置安全性。
可以创建用户和角色,并将用户分配给角色。
还可以配置SSL证书和访问控制列表等。
7. 执行故障排除:如果在WebLogic服务器上遇到问题,可以查看服务器日志文件和线程转储文件来进行故障排除。
还可以使用WebLogic控制台的诊断控制台来收集故障排除数据。
以上是一些WebLogic的常见操作,但并不限于此,实际操作会根据具体情况而有所不同。
性能分析与调优的原理及原则
性能分析与调优的原理最近一直纠结性能分析与调优如何下手*先从硬件开始'还是先从代码或数据库。
从操作系统(CPU调度*存管理*进程调度*磁盘I/O)、网络、协议(HTTP,TCP/IP),还是从应用程序代码,数据库调优,中间件配置等方面入手。
单1个中间件又分web中间件(apache 4IS) *应用中间件(tomcat 'weblogic・WebSphere)等,虽然都是中间件,每一样拎出来往深了学都不是一朝一夕之功。
但调优对于每一项的要求又不仅仅是“知道”或“会使用"这么简单。
起码要达到“如何更好的使用”。
常看到性能测试书中说,性能测试不单单是性能测试工程师一个人的事儿。
需要DBA、开发人员、运维人员的配合完成。
但是在不少情况下性能测试是由性能测试人员独立完成的,退一步就算由其它人员的协助,了解系统架构的各个模块对于自身的提高也有很大帮助*同进也更能得到别人的尊重。
再说性能调优之前*我们有必要再提一下进行測试的目的*或者我们进行性能测试的初衷是什么?崩力验证:验证某系统在一定条件具有什么样的能力。
施力規划:如何使系统达到我们要求的性能能力。
应用程序诊斷:比如存泄漏,通过功能测试很难发现,但通过性能測试却很容易发现。
性能调优:满足用户需求,进一步进行系统分析找出瓶颈 ' 优化瓶颈,提高系统整体性能。
性能测试调优需要先发现瓶颈*那么系统一般会存在哪些瓶颈:1、硬件上的性能瓶颈:一般指的是CPI:-存-磁盘I/O方面的问题*分为服务器硬件瓶颈' 网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置' 数据库'web服务器等)♦应用瓶颈(SQL语句♦数据库设计、业务逻辑、算法等)。
2♦应用软件上的性能瓶颈:一般指的是应用服务器' web服务器等应用软件 > 还包括数据库系统。
例如冲间件weblogic平台上配置的JDBC连接池的参数设置不合理進成的瓶颈。
weblogic运维时经常遇到的问题和常用的配置
weblogic运维时经常遇到的问题和常⽤的配置希望这篇能把weblogic运维时经常遇到的问题、常⽤的配置汇总到⼀起。
1、配置jvm参数:⼀般在domain启动过程中会看到以下启动的⽇志信息,如下图所⽰:图中红⾊⽅框部分为启动weblogic domain的命令。
其中包括了jvm参数以及classpath信息。
【注意】java -client是由于之前建⽴的domain是开发模式的。
⽣产模式的话,这⾥执⾏的是java -server。
⾄于-client与-server的区别,⼤家去google下吧,这⾥不介绍了。
那如何修改这个配置呢?找到setDomainEnv.cmd⽂件(linux下⾯就是setDomainEnv.sh了),位置为:weblogic11\user_projects\domains\example\bin\setDomainEnv.cmd修改⽂件中的MEM_ARGS部分,相关参数配置如下:Java代码1. call "%WL_HOME%\common\bin\commEnv.cmd"2.3. set WLS_HOME=%WL_HOME%\server4.5. if "%JAVA_VENDOR%"=="Sun" (6. set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512m7. set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m8. ) else (9. set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512m10. set WLS_MEM_ARGS_32BIT=-Xms512m -Xmx512m11. )12.13. set MEM_ARGS_64BIT=%WLS_MEM_ARGS_64BIT%14.15. set MEM_ARGS_32BIT=%WLS_MEM_ARGS_32BIT%16.17. if "%JAVA_USE_64BIT%"=="true" (18. set MEM_ARGS=%MEM_ARGS_64BIT%19. ) else (20. set MEM_ARGS=%MEM_ARGS_32BIT%21. )22.23. set MEM_PERM_SIZE_64BIT=-XX:PermSize=128m24.25. set MEM_PERM_SIZE_32BIT=-XX:PermSize=48m26.27. if "%JAVA_USE_64BIT%"=="true" (28. set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%29. ) else (30. set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%31. )32.33. set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256m34.35. set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m36.37. if "%JAVA_USE_64BIT%"=="true" (38. set MEM_MAX_PERM_SIZE=%MEM_MAX_PERM_SIZE_64BIT%39. ) else (40. set MEM_MAX_PERM_SIZE=%MEM_MAX_PERM_SIZE_32BIT%41. )42. if "%JAVA_VENDOR%"=="Sun" (43. if "%PRODUCTION_MODE%"=="" (44. set MEM_DEV_ARGS=-XX:CompileThreshold=8000 %MEM_PERM_SIZE%45. )46. )47.48. @REM Had to have a separate test here BECAUSE of immediate variable expansion on windows49.50. if "%JAVA_VENDOR%"=="Sun" (51. set MEM_ARGS=%MEM_ARGS% %MEM_DEV_ARGS% %MEM_MAX_PERM_SIZE%52. )53.54. if "%JAVA_VENDOR%"=="HP" (55. set MEM_ARGS=%MEM_ARGS% %MEM_MAX_PERM_SIZE%56. )57.58. if "%JAVA_VENDOR%"=="Apple" (59. set MEM_ARGS=%MEM_ARGS% %MEM_MAX_PERM_SIZE%60. )61.62. @REM IF USER_MEM_ARGS the environment variable is set, use it to override ALL MEM_ARGS values63.64. if NOT "%USER_MEM_ARGS%"=="" (65. set MEM_ARGS=%USER_MEM_ARGS%66. )主要就是修改-Xms、-Xmx、-XX:PermSize、-XX:MaxPermSize的参数(视具体硬件、JVM负载情况进⾏修改)。
tomcat性能调优方案
tomcat性能调优方案在开发和部署Web应用程序时,Tomcat是一款广泛使用的Java Servlet容器。
然而,随着业务的增长和用户量的上升,Tomcat性能问题可能会成为一个挑战。
为了确保应用程序的高效运行,我们需要采取一些性能调优措施。
本文将介绍一些Tomcat性能调优方案,以提高应用程序的性能和响应速度。
一、优化Tomcat服务器配置1. 调整内存参数:通过修改Tomcat的启动脚本‘catalina.sh’(Linux)或‘catalina.bat’(Windows),可以配置JVM的内存参数。
可以增加-Xms和-Xmx参数来增加JVM的初始堆大小和最大堆大小。
适当调整这些参数可以提高应用程序的内存管理效率,从而提高性能。
2. 调整连接器配置:Tomcat使用连接器来处理HTTP请求,可以通过调整连接器的配置参数来提高性能。
例如,调整maxThreads参数来增加同时处理请求的线程数,增加acceptCount参数来增加等待处理的请求队列长度,以及调整keepAliveTimeout参数来控制HTTP连接的持久化时间等。
二、优化应用程序代码1. 减少HTTP请求:每次HTTP请求都会消耗系统资源,并且增加网络延迟。
通过优化应用程序代码,减少不必要的HTTP请求可以提高性能。
例如,可以使用CSS sprites来减少图片加载请求,合并和压缩JavaScript和CSS文件来减少文件加载请求等。
2. 使用缓存:合理使用缓存机制可以减少对数据库和其他资源的请求次数,提高应用程序的性能。
例如,可以使用缓存技术来缓存数据库查询结果、页面片段或整个页面,以减少对数据库和服务器的访问次数。
3. 避免同步阻塞:多线程并发请求可能会导致同步阻塞,影响应用程序的性能。
通过合理使用同步机制和锁机制,避免同步阻塞可以提高性能。
例如,使用线程池来管理并发请求的线程,使用并发集合类来替代同步集合类等。
三、数据库优化1. 数据库索引优化:在使用数据库时,合理的索引设计可以大大提高查询性能。
WEBLOGIC启动JVM参数设置经验
WEBLOGIC启动JVM参数设置经验2011-11-01 08:41:46分类:Linux1. 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。
32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。
我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
典型设置:o java -Xmx3550m -Xms3550m -Xmn2g -Xss128k-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM促使内存为3550m。
此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。
整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。
持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。
此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。
JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。
更具应用的线程所需内存大小进行调整。
在相同物理内存下,减小这个值能生成更多的线程。
但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
o java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。
设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。
Weblogic内存溢出及常用参数配置
Weblogic内存溢出及常用参数配置一、WebLogic内存溢出最近访问量门户访问量突然增大,总是内存溢出,频繁宕机,调整了很多参数没起作用,偶然发现Weblogic域在不断增大,罪魁祸首竟然是Weblogic的诊断文件,也是造成Weblogic内存溢出的主要原因。
当Weblogic启动时就加载了每个Server上的诊断文件,占用了大部分内存分配,用户访问量越大这个文件也随之越大,将他删除后重新启动服务,八个Server竟然也只用了6分钟,部署项目也只需7,8分钟,一直平稳运行,再无内存溢出现象。
该文件地址:/bea/user_projects/domains/{domain_name}/servers/{Server_name}/data/s tore/diagnostics/*.DAT(注:AdminServer下该诊断文件为1M左右正常)但是该文件还会继续生成增大,我们的域中并没有配置相关启动诊断文件的设置,Bea售后也无法解释,但可以通过尝试增加启动参数(ui.disableInstrumentation=true)来控制该诊断文件的增长,在/bea/user_projects/domains/{domain_name}/bin/startWebLogic.sh中:if [ "${WLS_REDIRECT_LOG}" = "" ] ; thenecho "Starting WLS with line:"echo "${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS} ui.disableInstrumentation=true =${S ERVER_NAME}-Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${PROXY _SETTINGS} ${SERVER_CLASS}"${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS}ui.disableInstrumentation=true =${SE RVER_NAME}-Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${PROXY_SETTINGS} ${SERVER_CLASS}elseecho "Redirecting output from WLS window to ${WLS_REDIRECT_LOG}"${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS}ui.disableInstrumentation=true =${SE RVER_NAME}-Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${PROXY_SETTINGS} ${SERVER_CLASS} >"${WLS_REDIRECT_LOG}" 2>&1该参数控制netui的诊断文件的生成。
优化weblogic12
优化weblogic12Weblogic优化配置与问题排查一weblogic优化配置1节点启动优化在节点启动的脚本中增加以下语句,如start***Server.sh启动脚本1 export USER_MEM_ARGS="-Xms2048m -Xmx2048m -XX:MaxPermSize=1024m"2 export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=200"以上两个语句的作用是增加weblogic的内存与最大线程数。
2 问题排查1 数据库连接数占满问题排查,数据库连接一般会占用一段时间后主动释放,如果较长时间没有释放连接,会导致连接数挂满。
在weblogic上可以做如下配置,如果数据库连接超过多少秒没有释放,则会打印日志到文件中。
点击“服务”->数据源->点击jndi名称,点击“连接池”->“高级”点击“锁定并编辑”“连接保留超时”,设置为N秒,点击保存->激活更改,如果超过N秒数据库连接将被weblogic主动释放,然后点击“诊断”把概要文件连接泄漏打上对勾。
保存并激活更改。
此时如果出现数据库连接超时未释放的问题,weblogic 会把日志打印到节点的日志中。
2 部署的应用修改没有生效的问题此问题一般由weblogic缓存问题引起,可以在weblogic控制台,先停止web应用,点击锁定并编辑,删除应用,然后点击“服务器”->“控制”->“关闭”关闭相应的节点,然后在domains目录下执行find . -name webApp* -print命令,其中webApp是你的war 包名字(后面不用带.war),找到对应的目录执行rm -rf 打印出的路径,删除之后重新部署。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Weblogic 性能调优实战
我们的定位:我们是作为业务平台的提供商参与这个项目的,我们提供底层的开发平台,系统集成商在此基础上进行二次开发。
在项目从开发到部署的过程中遇到了很多的问题,也反映出很多问题。
一、怎么回事,跑得比猫还慢
项目开发完毕后部署在Ibm aix 小型机上,32G内存,16个cpu。
应用服务器采用的是weblogic9.2,数据库是oracle10.0.2。
上线后发现系统运行的非常缓慢,甚至比开发环境下的tomcat还要慢。
于是开始排查原因,最开始是对SQL进行监控,优先考虑是数据库访问性能产生瓶颈。
通过监控,发现很多业务需要执行大量的SQL语句,查看客户编写的相关代码,发现在查询数据时循环执行了大量SQL。
主要原因在于他们在代码中循环调用了我们相关API,一个最典型的例子是通过用户ID查找用户NAME,他们在业务表格里没有保存用户name,而是在查询的时候通过用户ID查找用户name填充到页面,几乎每一个查询都是n+1。
另外由于平台使用了hibernate,使得oo编程得非常爽快,导致开发人员完全忽略了相应的数据库操作所带来的压力。
很多业务逻辑直接通过PO叠加完成,把一些可以通过很少SQL 完成的逻辑全部分散放置到PO里,导致了大量PO的交互和SQL语句。
开始优化SQL,优化的同时增加大量业务缓存。
但优化完毕后运行缓慢的现象依旧存在,性能有了一定的提升但是不是非常明显。
继续优化,其中考虑过多频繁访问的数据使用内存数据库的方式。
但是优化过后在tomcat上效果明显,部署到生产环境就问题依旧。
于是考虑weblogic的配置问题,作为开发平台提供商,我们只是提供系统开发相关方面的支持,对于应用服务器和数据库服务器只是做基本的配置系统可运行即可。
但是在这个问题上系统集成商咬定是我们平台的问题不放,并且存在一个很严重的问题:他们使用的是盗版的weblogic,这样根本就没有相应的技术支持。
问题的解决:最后是找了一个BEA曾经的开发人员,问题实际非常的简单,现场部署的weblogic默认是运行在32位机器上,与64位机器存在一定的不兼容。
通过替换相应的jar 包,问题得到了解决,主要是IO方面。
替换完毕后,速度提升了进30% 。
该开发人员说,如果没有lisence,根本就不会得到这些替换的jar包。
二、内存耗尽了
访问速度的问题解决了,系统的使用量很快上来,马上遇到新的问题:内存耗尽了。
严重到几乎每天都要out of memory一次。
这种问题在客户现场频繁出现。
本地测试,tomcat,sun jdk 通过Jprofiler监测内存使用情况。
在并发访问门户的情况下,内存确实存在暴涨的情况,100并发,内存使用立刻上升了150m左右,继续并发100,再增长150m。
但是很快在抵达高峰时会有一次gc发生,内存使用稳定在200m,内存里大量char[]数组对象。
疲劳测试,内存使用曲线并没有出现逐渐上升泄露的情况。
换weblogic和jrocket测试,gc发生的更加频繁,内存使用稳定。
但是现场依旧频繁当机,内存根本释放不了,一直逐渐增长,典型的内存泄露。
对系统缓存、单态对象包括spring管理的对象、IO流进行了统一排查,依旧没有找到内存泄露的原因。
使用IBM 工具分析heapdump文件,结果还是大量的char[]数组对象占据内存,查找应用,找不到相关业务对象引用。
问题解决:问题解决是一篇偶尔搜到的oracle论坛的帖子,这里/forums /message.jspa?messageID=1040570 。
原因在于oracle10的数据库驱动对statement最后执行的结果集有着引用,并且不会释放,目的在于通过内存而换取更好的性能。
数据库连接采用的是weblogic的连接池,关于connection有个相关的statement cache设定,设定一个connection能够被缓存的statement个数,最大是1024,而现场就被设定为了1024!connection pool的connection个数被设置为了500 。
真是个恐怖的设置。
在将1024改为10后,内存使用量轰然倒地,稳定在1g左右。
这个设置是在前面系统访问速度存在问题时由系统集成商的开发人员设置上去的,他们将所有和优化相关的参数全部开到了最大。
这个问题要是用户购买的是正版的weblogic和oracle的话,相信也会很快得到解决。
三、线程阻塞
内存泄露的问题解决后,线程阻塞的问题浮出水面。
系统集成商报告是线程死锁,通过分析工具其实是线程阻塞,主要问题在于系统用到了synchronized关键字,对工作流相关API 全部使用了synchronized,原因在这里:http: ///blog/205731 。
分析发现一个工作项提交的操作在连接数据库时被挂起了20分钟!造成了大量线程的排队阻塞。
被挂起的原因有很多种。
我们采用的方法是将接口拆分和设置事务timeout时间。
但是这显然不是一个好方法。
最后是去掉所有的synchronized关键字,将同步的问题交由数据库解决,问题解决。