求助:PHP内存溢出问题Fatal error:out of video memorymemory

Java内存溢出和连接池死锁等各种混乱问题的解决 - 先知 - ITeye技术网站
博客分类:
概述:
&&& 在对后端java抓取微博数据系统从1.0升级到2.0的过程中,产生了一些严重的问题,经过调整后,目前这些问题未再出现。
问题1:
&&& 现象:前端页面数据混乱,A用户的数据混杂了B用户的数据,并且现象比较普遍。
&&& 原因:新浪基于JAVA语言SDK的V2版本存在BUG,有并发问题。
&&&&&&&&& 引起该问题的主要是SDK中的一个封装类:HttpClient。
&&&&&&&&& 因为该类为全局静态共享类,该类中的属性也同样成为全局共享类,在并发情况下,会导致部分属性的值被篡改,从而引起数据混乱。
&&& 解决办法:将该类中会导致并发问题的属性删掉,改为从方法参数中传入该值,改完后经反复测试,目前该问题未再复发。
问题2:
&&& 现象:后端抓取日志出现连接池死锁、长时间获取mysql连接失败以及内存溢出异常的现象。该现象比较混乱,各种错误混到一起,使得查找问题都不太容易。
&&& 原因:
&&&&&&&& 1,把java数据库连接池框架c3p0的日志打开后,发现c3p0存在死锁问题。
&&&&&&&& 2,部分SDK接口短时间内会返回大量的数据,可能因此而导致堆溢出。
&&&&&&&& 3,代码中的预处理sql会导致长时间获取mysql连接失败。
&&& 解决办法:
&&&&&&&& 针对问题1:更换连接池,经过一番调查和比较之后,选定淘宝开源连接池druid。经部署测试后,死锁问题未再出现。
&&&&&&&& 针对问题2:
&&&&&&&&&&&&&&&&&&& 首先,错误日志显示为“java.lang.OutOfMemoryError: Java heap space”,于是增加java虚拟机的最大堆内存,后发现问题仍然存在内存溢出,
&&&&&&&&&&&&&&&&&&&&&&&&& 不过错误日志信息变为了“java.lang.OutOfMemoryError: GC overhead limit exceeded”。
&&&&&&&&&&&&&&&&&&& 其次,通过对错误日志的分析,发现每次出现该问题时,都会有“提到我的微博”等抓取任务在运行,
&&&&&&&&&&&&&&&&&&&&&&&&& 于是修改了“提到我的微博”和“个人微博信息”等业务中每页返回的微博数,并调小部分代码中涉及到操作数的地方。
&&&&&&&&&&&&&&&&&&&&&&&&& 同时修改carry端启动脚本,在java命令后加入参数“-XX:+UseGCOverheadLimit”,之后内存溢出问题消失。
&&&&&&&& 针对问题3:这个问题找了很长的时间,调整了很多连接池的参数和java启动参数,并使用java内存监控工具分析和诊断。
&&&&&&&&&&&&&&&&&&& 最初认为是连接的空闲时间过长,空闲连接未被释放导致该问题,于是在druid连接池中加入一个参数“removeAbandoned”,
&&&&&&&&&&&&&&&&&&& 该参数会检测长时间未释放的空闲连接,若发现有这样的空闲连接并且空闲时间超过设定的时间,则会抛异常,并强行终止这种连接。
&&&&&&&&&&&&&&&&&&& 通过连续监控,并未发现预料中的强行终止异常,问题仍然重现。
&&&&&&&&&&&&&&&&&&& 最后通过对大量错误日志的分析,发现所有出现该问题的地方都会出现预处理sql,于是将代码中所有涉及到预处理sql的地方全都改成正常的普通sql,部署后问题未再出现。
浏览: 107544 次
来自: 北京
jconsole的使用其实并不复杂,主要是对jvm的一些概念要 ...
说的好深的感觉,反证我是没有看完。哲学就是要把人绕晕,
[s[color=red]ize=large]&tabl ...
结果集明显是错的
经验来自于实践2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。查看: 2952|回复: 17
QQ所属战队china.兰州火钻0 最后登录积分265注册时间帖子
新锐斯沃特, 积分 265, 距离下一级还需 335 积分
第三次发关于64位Win7系统out of memory的问题,不知道啥时候才能给解决?这两看到在论坛发表整个问题的帖子越来越多了,说明很多很多的玩家都有这问题了,打两场战服或者玩一个小时以上肯定out of memory,那些只会说 修改缓存、修改内存、修改硬盘、重装游戏、清理电脑、调整分辨率的2B可以不用回复这贴了,有那功夫建议下吃干饭的技术团队加强技术力量让游戏的BUG少出些,你们运营这个游戏不就是为挣钱么,但起码得挣的要脸啊,我们也愿意在游戏花些钱,不想吹牛B说哥在这游戏花多少钱了,我头像下面的心悦会员2级懂得人应该知道那是啥意思,图片是本人其中一台电脑配置,另一台比这个配置还好些!每天坚持一贴发问啥时候解决!我去年买了个表!
本帖子中包含更多资源
才可以下载或查看,没有帐号?
火钻2 最后登录积分122490注册时间帖子
Hold On, Pain Ends.
枪王灵狐者, 积分 122490, 距离下一级还需 37510 积分
出现这个提示就是系统虚拟内存的事啊&&调一下试试呗~
QQ<dd title="420991火钻40 最后登录积分2825注册时间帖子
精英黑鹰, 积分 2825, 距离下一级还需 2175 积分
16G的物理内存,还用调虚拟内存?搞不懂啊!
QQ所属战队china.兰州火钻0 最后登录积分265注册时间帖子
新锐斯沃特, 积分 265, 距离下一级还需 335 积分
:(版主,你让我拿什么语言去赞美你的智商!
QQ火钻0 最后登录积分235注册时间帖子
新锐斯沃特, 积分 235, 距离下一级还需 365 积分
和我一样这两天全都是out of memory掉出游戏的,大概玩几把一个小时的样子,就会弹出虚拟内存不足。然后到桌面。一般都是进房间的时候出现,其实就是那个开黑的qt语音搞得。
QQ火钻0 最后登录积分235注册时间帖子
新锐斯沃特, 积分 235, 距离下一级还需 365 积分
out of memory调到桌面后还有个qt语音的广告在桌面右下角。不知道和楼主一样否
QQ火钻2 最后登录积分390注册时间帖子
新锐斯沃特, 积分 390, 距离下一级还需 210 积分
我什么都没开,就开了火线,有时候进去游戏out of memory,然后弹出来了。 我4GB物理内存,所以还是设置的有虚拟内存的,楼主的16GB物理内存,根本不需要虚拟内存
QQ火钻2 最后登录积分390注册时间帖子
新锐斯沃特, 积分 390, 距离下一级还需 210 积分
我也晒一下
本帖子中包含更多资源
才可以下载或查看,没有帐号?
QQ所属战队Spurt丶电竞^火钻0 最后登录积分1900注册时间帖子
精英毒蝎, 积分 1900, 距离下一级还需 600 积分
不会~我都玩不了游戏:)
QQ火钻0 最后登录积分2050注册时间帖子
精英毒蝎, 积分 2050, 距离下一级还需 450 积分
别指望TX有本事解决这问题!都好久了....
QQ火钻0 最后登录积分855注册时间帖子
精英波塞冬, 积分 855, 距离下一级还需 345 积分
:@:@:@:@:@:@:@& &重装过系统几次 虚拟内存调了无数回&&cf客户端 下了装 装了删 从d盘到e盘 从e盘到d盘& &&&我去年买了个表 现在弄的 每次进游戏打战场只能打一把 再进别的房间房主一按 开始 一读条 直接回桌面 out of memory& && && &火大& && && && &4g内存 gtx560 i72600& &win7 32位 旗舰&&
QQ火钻0 最后登录积分20注册时间帖子
新锐奥摩, 积分 20, 距离下一级还需 30 积分
本人8G内存&&i5的U&&win7 64位旗舰& &
尝试过开启用户进程3G& &也试过虚拟内存加大& &同样试过关闭超级预读& & 各种尝试各种out&&
经过本人细心发觉,因为out都是在加载地图和退出地图的时候,终于摸索出来一个办法 ,就是每结束一局就退出房间一下,本人常年当兵,对于掉桌面苦不堪言,现在此法玩个十几局都不掉喔,不用蛋疼的挤频道啦
QQ火钻0 最后登录积分445注册时间帖子
头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
QQ<dd title="3235火钻0 最后登录积分10注册时间帖子
新锐奥摩, 积分 10, 距离下一级还需 40 积分
表示CF的确很**,Win 7 -64系统,out of memory , 8G HyperX 双通道 , i5 3570K
QQ火钻0 最后登录积分649注册时间帖子
精英波塞冬, 积分 649, 距离下一级还需 551 积分
win7 32位的表示没出过 {:soso_e141:}
QQ所属战队xyz一线天火钻0 最后登录积分5注册时间帖子
新锐奥摩, 积分 5, 距离下一级还需 45 积分
其实我每次出现这个情况我都把TX的祖宗十八代马上好几十遍我也不大懂从网上搜个资料
“outofmemory” 意思就是内存不足,在读大型地图的时候,客户端引擎发现系统内存不足,而中断进程。出现这种情况的同学多数的配置都是2G win7 32位系统。out of memory的出现,尤其在挑战29关或者是其他模式打了半天战绩全没了烦恼很多人 下面介绍完善一些的方法:
Windows 7 /Windows 8/WindowsVISTA系统下开启PAE\3GB
1进入cmd:点击开始菜单,在搜索框中输入 cmd 。
2输入如下命令BCDEdit /set PAE forceenable Windows
3输入如下命令bcdedit /set increaseuserva 3072
注意:1、每输一条指令按回车看到操作完成成功后才去输下一个,完成后要重启计算机才生效。
2、物理内存只有2-3G或者修改指令后依旧OUT的用户用完这些指令后,建议去电脑属性那里把虚拟内存调到6-8GB(设定的盘符格式必须NTFS格式)。
如果觉得修改有问题的网友,可以参照下面指令还原。
关闭方法如下:进入cmd:点击开始菜单,在搜索框中输入cmd
关闭PAE:bcdedit /set pae forcedisable
关闭3GB:bcdedit /deletevalue IncreaseUserVa
——————————————————————华丽的分割线————————————————————WINDOWS XP 系统下开启PAE\3GB
由于XP系统不支持BCDEdit编辑,所以不能用WIN7的指令修改,只能修改boot来解决。
先设置显示隐藏文件,然后去C盘打开BOOT.INI,先把boot.ini的只读属性去掉,修改好保存后,再去恢复只读属性...
然后参照红色字体部分修改。由于不是每个系统的boot.ini都一样,所以添加 /PAE /3GB基本可以(红字部分)...注意格式...
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=&Microsoft Windows XP Professional&/PAE/NoExecute=alwaysoff /fastdetect/3GB
注意事项,XP的boot修改极其麻烦,容易出错,并不是每个XP都适用,修改不当会造成无法读去引导而无法进入系统,要用PE系统重新加载引导,所以修改请谨慎...
最后再说一遍 这只是代替的解决方案 并不能完全解决内存溢出的问题 如果想根治问题 还是需要增加物理内存。。。。。
我也是被逼无奈才去搜索资料解决的,希望能帮到你。。。。。
QQ所属战队带累的鱼火钻2 最后登录积分2695注册时间帖子
精英黑鹰, 积分 2695, 距离下一级还需 2305 积分
实我每次出现这个情况我都把TX的祖宗十八代马上好几十遍我也不大懂从网上搜个资料
“outofmemory” 意思就是内存不足,在读大型地图的时候,客户端引擎发现系统内存不足,而中断进程。出现这种情况的同学多数的配置都是2G win7 32位系统。out of memory的出现,尤其在挑战29关或者是其他模式打了半天战绩全没了烦恼很多人 下面介绍完善一些的方法:
Windows 7 /Windows 8/WindowsVISTA系统下开启PAE\3GB
1进入cmd:点击开始菜单,在搜索框中输入 cmd 。
2输入如下命令BCDEdit /set PAE forceenable Windows
3输入如下命令bcdedit /set increaseuserva 3072
注意:1、每输一条指令按回车看到操作完成成功后才去输下一个,完成后要重启计算机才生效。
2、物理内存只有2-3G或者修改指令后依旧OUT的用户用完这些指令后,建议去电脑属性那里把虚拟内存调到6-8GB(设定的盘符格式必须NTFS格式)。
如果觉得修改有问题的网友,可以参照下面指令还原。
关闭方法如下:进入cmd:点击开始菜单,在搜索框中输入cmd
关闭PAE:bcdedit /set pae forcedisable
关闭3GB:bcdedit /deletevalue IncreaseUserVa
——————————————————————华丽的分割线————————————————————WINDOWS XP 系统下开启PAE\3GB
由于XP系统不支持BCDEdit编辑,所以不能用WIN7的指令修改,只能修改boot来解决。
先设置显示隐藏文件,然后去C盘打开BOOT.INI,先把boot.ini的只读属性去掉,修改好保存后,再去恢复只读属性...
然后参照红色字体部分修改。由于不是每个系统的boot.ini都一样,所以添加 /PAE /3GB基本可以(红字部分)...注意格式...
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=&Microsoft Windows XP Professional&/PAE/NoExecute=alwaysoff /fastdetect/3GB
注意事项,XP的boot修改极其麻烦,容易出错,并不是每个XP都适用,修改不当会造成无法读去引导而无法进入系统,要用PE系统重新加载引导,所以修改请谨慎...
最后再说一遍 这只是代替的解决方案 并不能完全解决内存溢出的问题 如果想根治问题 还是需要增加物理内存。。。。。
我也是被逼无奈才去搜索资料解决的,希望能帮到你。。。。。
QQ火钻0 最后登录积分1829注册时间帖子
精英毒蝎, 积分 1829, 距离下一级还需 671 积分
我也想去年买个表
Powered by一次内存溢出(Out Of Memory)故障诊断全过程 | 系统运维 |
_数据库_运维_开发_IT学习_无忧IT学习网
一起学习!一起进步!
一次内存溢出(Out Of Memory)故障诊断全过程
浏览: 340 views
是一个几月前的案例,问题比较典型,在分析和事后学习的过程中让我对本地内存溢出有了一定的了解。在此和大家分享。
先说一下背景,应用环境是AIX5.3+WebSphere6.0.2.37。在今年的一季度曾发生过几次OOM故障,当时通过几次内存参数优化,最...
是一个几月前的案例,问题比较典型,在分析和事后学习的过程中让我对本地内存溢出有了一定的了解。在此和大家分享。
先说一下背景,应用环境是AIX5.3+WebSphere6.0.2.37。在今年的一季度曾发生过几次OOM故障,当时通过几次内存参数优化,最后确定为&-Xgcprolicy:gencon &Xms512m &Xmx1280m &Xmn200m&,此后稳定了半年,直到此次再发生应用宕机。
赶到现场,发现profiles目录下生成有core和heapdump文件,core的第一行&Cause of thread dump : Dump Event &systhrow& () Detail &/lang/OutOfMemoryError& received&表明了宕机的原因是OOM,但是令我困惑的是这段内容:
MEMINFO subcomponent dump routine
=================================
1STHEAPFREE
Bytes of Heap Space Free: 818cb70
1STHEAPALLOC
Bytes of Heap Space Allocated:
在分配的512MB(十六进制)的堆空间中,有129MB(818cb70)空闲空间,按理说,这种情况下不该发生OutOfMemory。就算有申请一个大对象,同时JVM堆的新生代由于碎片原因没有连续空间满足要求,那么应该发生堆扩展,所以此次内存溢出不是堆(Heap)溢出,GC日志的分析也支持了这一点。
既然core无法得到有用信息,我把目光转向了SystemErr.log,在对应日期的地方,我发现了大量如下报错:
[8/26/10 14:12:57:860 GMT+08:00] 0000002f SystemErr
R Exception in thread &WebContainer : 1& java.lang.RuntimeException: java.lang.OutOfMemoryError: Failed to create a thread: retVal -, errno 11
[8/26/10 14:12:57:860 GMT+08:00] 0000002f SystemErr
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:801)
[8/26/10 14:12:57:860 GMT+08:00] 0000002f SystemErr
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
[8/26/10 14:12:57:860 GMT+08:00] 0000002f SystemErr
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
[8/26/10 14:12:57:860 GMT+08:00] 0000002f SystemErr
R Caused by: java.lang.OutOfMemoryError: Failed to create a thread: retVal -, errno 11
at java.lang.Thread.startImpl(Native Method)
at java.lang.Thread.start(Thread.java:980)
at com.ibm.ws.util.ThreadPool.addThread(ThreadPool.java:630)
at com.ibm.ws.util.ThreadPool$3.run(ThreadPool.java:1148)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63)
at com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1146)
at com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1040)
at com.ibm.ws.runtime.WSThreadPool.execute(WSThreadPool.java:151)
at com.ibm.io.async.ResultHandler.startHandler(ResultHandler.java:248)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:570)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
在事后的学习中,我知道&.lang.OutOfMemoryError: unable to create native thread& 这样的异常是在说,本地内存耗尽,从而新的线程无法创建。而在当时我第一感觉是操作系统参数设置问题,之前我曾写过一篇由于nofile参数导致Too many open file的故障。于是我运行如下命令:
#lsattr -El sys0 -a maxuproc
maxuproc 128 Maximum number of PROCESSES allowed per user True
然后运行chgsys修改默认的128为1024,这里我犯了一个错误,WebSphere单个Server就是一个进程,错误日志里是不能创建一个thread,而非process,与会创建多个oracle进程不一样。果然两天后又出现了同样的问题。
这一次的SystemErr日志中,除了上述的内容,还多了
[8/24/10 9:55:19:813 GMT+08:00]
R Exception in thread &WebContainer : 4& java.lang.RuntimeException:java.lang.OutOfMemoryError: Unable to allocate 8192 bytes of direct memory after 5 retries
[8/24/10 9:55:19:813 GMT+08:00]
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:801)
[8/24/10 9:55:19:813 GMT+08:00]
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
[8/24/10 9:55:19:813 GMT+08:00]
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
[8/24/10 9:55:19:813 GMT+08:00]
R Caused by: java.lang.OutOfMemoryError: Unable to allocate 8192 bytes of direct memory after 5 retries
at java.nio.DirectByteBuffer.&init&(DirectByteBuffer.java:197)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:303)
at com.ibm.ws.buffermgmt.impl.WsByteBufferPoolManagerImpl.allocateBufferDirect(WsByteBufferPoolManagerImpl.java:656)
at com.ibm.ws.buffermgmt.impl.WsByteBufferPoolManagerImpl.allocateCommon(WsByteBufferPoolManagerImpl.java:570)
at com.ibm.ws.buffermgmt.impl.WsByteBufferPoolManagerImpl.allocateDirect(WsByteBufferPoolManagerImpl.java:506)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:498)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
Caused by: java.lang.OutOfMemoryError
at sun.misc.Unsafe.allocateMemory(Native Method)
at java.nio.DirectByteBuffer.&init&(DirectByteBuffer.java:184)
我们可以看到是由于DirectByteBuffer无法分配导致的内存溢出,而Native Method指明了这是&本地&的溢出。通过这两个关键字,我查到了IBM的一份BUG记录:PK31010: OUTOFMEMORYERROR DUE TO DIRECTBYTEBUFFER,但是我的版本已是最新,无奈继续搜寻。
在Troubleshooting native memory issues这份文档中,介绍了3种在WebSphere中最常见的导致OOM的原因。其中第二个DirectByteBuffer use就是我们问题的症结。以下是摘自《理解JVM如何使用Windows和Linux上的本机内存》:
1.4 中添加的新 I/O (NIO) 类引入了一种基于通道和缓冲区来执行 I/O 的新方式。就像
堆上的内存支持 I/O 缓冲区一样,NIO 添加了对直接 ByteBuffer 的支持(使用.nio.ByteBuffer.allocateDirect() 方法进行分配),ByteBuffer 受本机内存而不是
堆支持。直接 ByteBuffer 可以直接传递到本机操作系统库函数,以执行 I/O & 这使这些函数在一些场景中要快得多,因为它们可以避免在
堆与本机堆之间复制数据。
&&& 对于在何处直接 ByteBuffer 数据,很容易产生混淆。应用程序仍然在
堆上使用一个对象来编排 I/O 操作,但持有该数据的缓冲区将保存在本机内存中, 堆对象仅包含对本机堆缓冲区的引用。非直接 ByteBuffer 将其数据保存在
堆上的 byte[] 数组中。下图展示了直接与非直接 ByteBuffer 对象之间的区别:
&&&& 直接与非直接 .nio.ByteBuffer 的内存拓扑结构
直接 ByteBuffer 对象会自动清理本机缓冲区,但这个过程只能作为
堆 GC 的一部分来执行,因此它们不会自动响应施加在本机堆上的压力。GC 仅在
堆被填满,以至于无法为堆分配请求提供服务时发生,或者在
应用程序中显式请求它发生(不建议采用这种方式,因为这可能导致性能问题)。
发生垃圾收集的情形可能是,本机堆被填满,并且一个或多个直接 ByteBuffers 适合于垃圾收集(并且可以被释放来腾出本机堆的空间),但
堆几乎总是空的,所以不会发生垃圾收集。
解决此问题的方法,在文档中给出的是禁止异步A/O,通过在Web Container中设置参数来避免上节中所出现的由于堆空闲而不发生垃圾回收,导致本地堆撑满的情况。
Servers -& Application Servers -& serverName -& Web Container Settings -& Web Container -& Custom Properties:
Press New: Add the following pair:
Name: com.ibm.ws.webcontainer.channelwritetype Value: sync
Press OK, and then save the configuration.
添加此属性后应用又恢复正常,但是原先提高性能的特性反而导致内存溢出,违背了初衷,现在的做法只能算一个妥协。我会继续查找此问题的解决方法,最不济也要有个使用NIO的Best Practice。
文档中另两个容易导致本地堆OOM的原因是过大的堆上限
我们知道32位机器单个进程可以访问的内存地址空间为4G,如右图所示,但实际情况下由于内核态和用户态的划分,用户态只有2G的空间,Linux和AIX的可用空间大一点,但也在3G左右。,由于JVM实例进程寻址是一定的,所以Heap大小和Native Area此消彼长。而Native Area中有一部分就是供给线程的内存空间。
&应用程序中的每个线程都需要内存来器堆栈(用于在调用函数时持有局部变量并维护状态的内存区域)。每个
线程都需要堆栈空间来运行。根据实现的不同, 线程可以分为本机线程和
堆栈。除了堆栈空间,每个线程还需要为线程本地存储(thread-local storage)和内部数据结构提供一些本机内存。堆栈大小因
实现和架构的不同而不同。一些实现支持为
线程指定堆栈大小,其范围通常在 256KB 到 756KB 之间。&
1.5后一般线程堆栈大小为1M,&对于拥有数百个线程的应用程序来说,线程堆栈的总内存使用量可能非常大。如果运行的应用程序的线程数量比可用于处理它们的处理器数量多,效率通常很低,并且可能导致糟糕的性能和更高的内存占用&(摘自《理解JVM如何使用Windows和Linux上的本机内存》)
解决此问题的方法:设置恰当的JVM最大堆,32位不要超过1.5G;设置恰当的线程池大小(一般50~100),当线程使用较多时, 使用-Xss256k参数设置线程指定堆栈大小(IBM JDK还可以使用&Xmso&&&k来设置Stack size for OS Threads 32-bit);更换64位的JDK。
第三个原因是线程池的TLS泄漏
这个现象我倒没见到过,如果你的thread dump里下面三个属性里的值有大于300,那么就要注意了
&WebContainer : 1003& (TID:0&37D62000
&Default : 338& (TID:
&TCPChannel.DCS : 303& (TID:0&4D720000
解决的方法是设置线程池的最小最大值一致。&
标签: , , ,
& | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | &
最热门文章
41036 views
10767 views
9967 views
6372 views
5808 views
4678 views
4070 views
4001 views
友情链接 |
本站进行138次查询

我要回帖

更多关于 cf out of memory 的文章

 

随机推荐