stuckthreadmaxtime 怎么修改

下次自动登录
现在的位置:
& 综合 & 正文
weblogic threadpool has stuck threads引发内存溢出
最近项目老是出问题,weblogic的nohup日志文件中找到下面一段(红色部分是关键),大意是当前请求时间大于默认的请求时间,因此需要将默认的请求时间改大点就行了,其实也就是要修改weblogic中的StuckThreadMaxTime参数。
&Oct 14, :05 AM GMT+08:00& &Error& &WebLogicServer& &BEA-000337& &[STUCK] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "683" seconds
working on the request "weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@24e924e9", which is more than the configured time (StuckThreadMaxTime) of "600" seconds.
Stack trace:
&Oct 14, :05 AM GMT+08:00& &Error& &Kernel& &BEA-000802& &ExecuteRequest failed
java.lang.NullPointerException.
java.lang.NullPointerExceptionat java.lang.Thread.setPriority(Thread.java:817)at weblogic.work.ThreadPriorityManager.setThreadPriority(ThreadPriorityManager.java:207)at weblogic.work.ThreadPriorityManager.handleHogger(ThreadPriorityManager.java:226)at weblogic.work.RequestManager.getStuckThreads(RequestManager.java:919)at weblogic.work.ThreadPoolRuntimeMBeanImpl.getStuckExecuteThreads(ThreadPoolRuntimeMBeanImpl.java:100)Truncated. see log file for complete stacktrace
修改weblogic中的StuckThreadMaxTime参数:登录weblogic的控制台——环境(Environment)——服务器(Servers),点击AdminServer(admin)——配置(Configuration)——优化(Tuning),如下图所示
同理,重载(Overload),如下图:
&&&&推荐文章:
【上篇】【下篇】博客分类:
注:在下面做的介绍都是以Weblogic8.1为例的,其它版本的Weblogic可能会有些许不同。1) 设置JAVA参数;a) 编辑Weblogic Server启动脚本文件;BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh on Unix)
BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix) --这个是做集群的时候用的b) 编辑set JAVA_OPTIONS命令,如:set JAVA_OPTIONS=-Xms256m –Xmx256m;(在UNIX下把MEM_ARGS="-Xms1024m -Xmx1024m -Xmn128m"加到上述两个.sh文件中即可)c) 保存,重启即可。注:在WebLogic中,为了获得更好的性能,BEA公司推荐最小Java堆等于最大Java堆。(这个偶们的设置都是1024M的,反正偶们内存大大的4G呢)2) 开发模式 vs. 产品模式;开发模式和产品模式的一些参数的默认值不同,可能会对性能造成影响,下面是对性能有影响的参数列表:
开发模式默认值
产品模式默认值
Execute Queue: Thread Count
15 threads
25 threads
JDBC Connection Pool: MaxCapacity
15 connnections
25 connections
通过启动管理控制台,在域(如:mydomain)& 配置 & 常规选择产品模式。(这个在创建weblogic的domain的时候是有选择的,选择“产品”模式就可以了,如果后期需要修改,可以按照上面的方法修改)3) 尽量开启本地I/O;通过启动管理控制台,在域(如:mydomain)& 服务器 & server实例(如:myserver)& 配置 & 调整选择启用本地I/O。注:此值也可通过手动的修改config.xml配置文件。(这个没有试验过,不晓得有什么效果和好处,知道的告诉偶下下。)4) 调优执行队列线程;a) 修改默认执行线程数在这里,执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好,应该恰到好处的去设置它,太小了,执行队列中将会积累很多待处理的任务,太大了,则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为25个执行线程。(点:一般来说,其上限是每个CPU对应50个线程,其按照CPU个数线性增长.)为了设置理想的执行队列的线程数,我们可以启动管理控制台,在域(如:mydomain)& 服务器 & server实例(如:myserver)& 监视 & 性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数,据此确定理想的数值。理想的默认执行线程数是由多方面的因素决定的,比如机器CPU性能、总体体系架构、I/O、操作系统的进程调度机制、JVM的线程调度机制。随着CPU个数的增加,WebLogic可以近乎线性地提高线程数。线程数越多,花费在线程切换的时间也就越多;线程数越小,CPU可能无法得到充分的利用。为获取一个理想的线程数,需要经过反复的测试。在测试中,可以以25*CPU个数为基准进行调整。当空闲线程较少,CPU利用率较低时,可以适当增加线程数的大小(每五个递增)。对于PC Server和Windows 2000,则最好每个CPU小于50个线程,以CPU利用率为90%左右为最佳。通过启动管理控制台,在域(如:mydomain)& 服务器 & server实例(如:myserver)& Execute Queue & weblogic.kernel.Defalt & 配置中修改线程计数。b) 设定执行队列的溢出条件;
Weblogic Server提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能,当满足此溢出条件时,服务器改变其状态为“警告”状态,并且额外的再分配一些线程去处理在队列中的请求,而达到降低队列长度的目的。
通过启动管理控制台,在域(如:mydomain)& 服务器 & server实例(如:myserver)& Execute Queue & weblogic.kernel.Defalt & 配置下面几项:●队列长度:此值表示执行队列中可容纳的最大请求数,默认值是65536,最后不要手动改变此值。●队列长度阈值百分比:此值表示溢出条件,在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。●线程数增加:当检测到溢出条件时,将增加到执行队列中的线程数量。如果CPU和内存不是足够的高,尽量不要改变默认值“0”。因为Weblogic一旦增加后不会自动缩减,虽然最终可能确实起到了降低请求的作用,但在将来的运行中将影响程序的性能。●最大线程数:为了防止创建过多的线程数量,可以通过设定最大的线程数进行控制。在实际的应用场景中,应根据具体情况适当的调整以上参数。c) 设定执行队列监测行为Weblogic Server能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作,也无法再执行新请求。如果执行队列中的所有执行线程都变为“阻塞”状态,Weblogic server可能改变状态为“警告”或“严重”状态。如果Weblogic server变为“严重”状态,可以通过Node Manager来自动关闭此服务器并重新启动它。具体请参考:Node Manager Capabilities文档。通过启动管理控制台,在域(如:mydomain)& 服务器 & server实例(如:myserver)&配置 & 调整下可配置下面几项:●阻塞线程最长时间:在此服务器将线程诊断为阻塞线程之前,线程必须连续工作的时间长度(秒)。默认情况下,WebLogic Server 认为线程在连续工作 600 秒后成为阻塞线程。●阻塞线程计时器间隔:WebLogic Server 定期扫描线程以查看它们是否已经连续工作了 "阻塞线程最长时间" 字段中指定的时间长度的间隔时间(秒)。默认情况下,WebLogic Server 将此时间间隔设置为 600 秒。5) 调优TCP连接缓存数;WebLogic Server用Accept Backlog参数规定服务器向操作系统请求的队列大小,默认值为50。当系统重载负荷时,这个值可能过小,日志中报Connection Refused,导致有效连接请求遭到拒绝,此时可以提高Accept Backlog 25%直到连接拒绝错误消失。对于Portal类型的应用,默认值往往是不够的。Login Timeout和SSL Login Timeout参数表示普通连接和SSL连接的超时时间,如果客户连接被服务器中断或者SSL容量大,可以尝试增加该值。通过启动管理控制台,在域(如:mydomain)& 服务器 & server实例(如:myserver)&配置 & 调整下可配置“接受预备连接”。6) 改变Java编译器;标准的Java编译器是javac,但编译JSP servlets速度太慢,为了提高编译速度,可以使用sj或jikes编译器取代javac编译器。下面说说更改Java编译器:通过启动管理控制台,在域(如:mydomain)& 服务器 & server实例(如:myserver)&配置 & 常规下改变Java 编译器,默认为javac。输入完整路径,如:c:\visualcafe31\bin\sj.exe。然后打开高级选项,在预规划到类路径填写编译 Java 代码时为 Java 编译器类路径预规划的选项,如:BEA_HOME\jdk141_02\jre\lib\rt.jar。7) 使用Webogic Server集群提高性能;具体关于如何配置Weblogic集群,我就不细说了。详情可参考:Introduction to WebLogic Server Clustering。8) Weblogic EJB调优由于EJB2.0已经很少项目在用了,EJB3.0再成熟一点,我再补充这一部分吧!9) JDBC应用调优JDBC Connection Pool的调优受制于WebLogic Server线程数的设置和数据库进程数,游标的大小。通常我们在一个线程中使用一个连接,所以连接数并不是越多越好,为避免两边的资源消耗,建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,将最小值和最大值设为一致。增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮助,WebLogic能够为每一个连接缓存这些对象,此值默认为10。在保证数据库游标大小足够的前提下,可以根据需要提高Statement Cache Size。比如当你设置连接数为25,Cache Size为10时,数据库可能需要打开25*10=250个游标。不幸的是,当遇到与PreparedStatement Cache有关的应用程序错误时,你需要将Cache Size设置为0。尽管JDBC Connection Pool提供了很多高级参数,在开发模式下比较有用,但大部分在生产环境下不需调整。这里建议最好不要设置测试表, 同时Test Reserved Connections和Test Released Connections也无需勾上。 当然如果你的数据库不稳定,时断时续,你就可能需要上述的参数打开。最后提一下驱动程序类型的选择,以Oracle为例,Oracle提供thin驱动和oci驱动,从性能上来讲,oci驱动强于thin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改进,这一弱势将得到弥补。而thin驱动的移植性明显强于oci驱动。所以在通常情况下建议使用thin驱动。而最新驱动器由于WebLogic server/bin目录下的类包可能不是最新的,请以Oracle网站为准: /technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html。10) JSP调优设置jsp-param pageCheckSeconds=-1;设置serlet-reload-check=-1或ServletReloadCheckSecs=-1;设置jsp-param precompile=true,关闭JSP预编译选项。
一个牛人给出的参考: 系统的线程池配置考虑以下因素: 1,
机器的计算能力; 2,
子系统每个线程的计算复杂性; 3,
整个系统的均衡性。 因此,建议设定一个标准范围,例如(举例说明,具体数值根据情况斟酌): 机型:DL380G4/2*3G/4G,线程池大小范围:80-120(无特殊情况一般设为100); 机型:DL380G5/2*2G/4G,线程池大小范围:100-120(无特殊情况一般设为110); 机型:BL460C/2*3G/4G,线程池大小范围:100-120(无特殊情况一般设为110);
浏览 10354
浏览: 2542239 次
来自: 北京
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
总结的不错。
u 写道也能给我发一份翻译文档? 邮件437 ...
也能给我发一份翻译文档?
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'修改StuckThreadMaxTime_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
修改StuckThreadMaxTime
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢weblogic性能优化_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
weblogic性能优化
&&weblogic性能优化
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢博客访问: 574123
博文数量: 1467
注册时间:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
今天在客户现场出现了weblogic down的事件,还是老规矩,陆续察看了几个相关日志,在server.log中发现error事件——stuckThreadMaxTime 600 second
首先我们来说明一下stuckThreadMaxTime,如下:WebLogic Server 提供 stuckThreadMaxTime 及stuck Thread Timer Interval 兩個參數協助偵測 thread stuck 的狀況並發出警訊 , stuckThreadMaxTime 的 default 值為 600 秒 , stuckThreadTimerInterval 的 deault 值也是 600 秒 , 每 600 秒 WebLogic Server 會檢查 Queue 中所有的 thread, 如果發現有持續工作 600 秒的狀況發生 ,Server 認定這個 thread 的狀態為 stuck, stuck 住的 thread 在 Server log 中會有記錄提醒管理者 , 如果情況持續的惡化 ,stuck thread 數量越來越多 , 造成 WEBLogic Server 的 Default Execute Queue 中的 thread 全部 stuck,Server 就會變更自己的狀態為 CrITical, 如果是 Customer Execute Queue,Server 變更自己的狀態為 Warning
在以前的项目中,也遇到过由于thread的异常造成了java processes的异常中断,看了一下相关程序,是用来发送邮件的,为了避免requestTimeout和页面友好度,采用异步发送(采用异步thread),在设计时忽略了一点,那就是异步线程同样受限于stuckThreadMaxTime,而且有多年java经验的人应该清楚,JVM Thread机制相比C/C++是非常不稳定和低效的
为了避免这样的问题,现在改成JNI C进行处理,当然如果有条件或者对应用要求过高的环境,可以使用JMS进行数据主推的分布式工作
以上就是这次事件的记录过程,有兴趣的朋友可以多讨论
阅读(6862) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
我这边也存在这样的问题。
可以一起讨论一下。QQ:
请登录后评论。}

我要回帖

更多关于 weblogic挂起 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信