




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内存溢出出现原因及解决方案篇一:内存溢出解决方案内存溢出解决方案篇二:内存溢出的三种情况及系统配置解决方案近经常有人咨询相关内存溢出的问题,在生产环境中tomcat 内存设置不好很容易出现内存溢出。 造成内存原因是不一样的,当然处理方式也不一样。这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况: java heap space: permgen space: unable to create new native thread.tomcat 内存溢出解决方案对于前两种情况,在应用本身没有内存泄露的情况下可以用设置 tomcat jvm 参数来解决。 ( -xms -xm
2、x -xx : permsize-xx : maxpermsize)最后一种可能需要调整操作系统和 tomcat jvm 参数同时调整才能达到目的。第一种:是堆溢出。在jvm中如果98%的时间是用于 gc且可用的heap size不足 2的时候将抛出此异常信息。没有内存泄露的情况下,调整-xms -xmx 参数可以解决。-xms :初始堆大小-xmx :最大堆大小但堆的大小受下面三方面影响:1. 相关操作系统的数据模型( 32-bt 还是 64-bit )限制;(32位系统下,一般限制在 2g我在20xx server系统下(物理内存: 4g 和 6g, jdk :)测试 1612m, 64
3、为操作系统对内存无限制。 )2. 系统的可用虚拟内存限制;3. 系统的可用物理内存限制。堆的大小可以使用 java -xmx*m version 命令来测试。支持的话会出现jdk 的版本号,不支持会报错。 -xms-xmx一般配置成一样比较好比如set java_opts=xms1024m-xmx1024m第二种:永久保存区域溢出permgen space 的全称是 permanent generation space ,是指内存的永久保存区域。这一部分用于存放class 和的信息, class 在被 load 的时候被放入permgen space 区域,它和和存放instance 的hea
4、p区域不同,gc (garbagecollection )不会在主程序运行期对permgen space 进行清理,所以如果你的 app会loadf艮多class的话,就很可能由现permgenspace错误。这种错误常见在web服务器对jsp进行 pre pile 的时候。但目前的 hibernate 和 spring 项目中也很容易出现这样的问题。可能是由于这些框架会动态class ,而且 jvm 的 gc 是不会清理pemgen space 的,导致内存溢出。这一个一般是加大-xx : permsize -xx : maxpermsize 来解决问题。-xx : permsize 永久保
5、存区域初始大小-xx : permsize 永久保存区域初始最大值这一般结合第一条使用,比如 set java_opts=-xms1024m -xmx1024m -xx: permsize=128m -xx :permsize=256m有一点需要注意: java -xmx*m version 命令来测试的最大堆内存是-xmx 与 -xx : permsize 的和 比如系统支持最大的 jvm 堆大小事,那 -xmx1024m -xx : permsize=768m是无法运行的。第三种:无法创建新的线程。这种现象比较少见,也比较奇怪,主要是和 jvm 与系统内存的比例有关。这种怪事是因为jvm已
6、经被系统分配了大量的内存 (比如),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下,你分配给 jvm的内存越多,那么,上述错误发生的可能性就越大。 产生这种现象的原因如下(从这个 blog 中了解到原因:每一个 32 位的进程最多可以使用 2g 的可用内存,因为另外2g被操作系统保留。这里假设使用给 jvm,那么还余下 500m可用内存。这500m内存中的一部分必须用于系统 dll 的加载, 那么真正剩下的也许只有400m, 现在关键的地方出现了:当你使用java创建一个线程,在 jvm的内存里也会 创建一个 thread 对象,但是同时也会在操作系统里创建一个真正的物理线程
7、(参考 jvm规范),操作系统会在余下的 400兆内存里创建这个物理线程,而不是在jvm的1500m的内存堆里创建。在里头,默认的栈大小是256kb,但是在里头,默认的栈大小为 1m每线程,因此,在余下 400m的可用 内存里边我们最多也只能创建400 个可用线程。这样结论就出来了,要想创建更多的线程,你必须减少分配给jvm的最大内存。还有一种做法是让jvm宿主在你的jni 代码里边。给出一个有关能够创建线程的最大个数的估算公式:( maxprocessmemory - jvmmemory- reservedosmemory)/(threadstacksize ) = number of th
8、reads对于而言,假设操作系统保留 120m 内存:jvm : () / (1mb) = 380 threadsjvm : () / ( 1mb) = 880 threads/pae在 20xx/xp/20xx 的里头有一个启动选项,好像是:/3g , 可以让用户进程最大内存扩充至3g, 这时操作系统只能占用最多1g的虚存。那样应该可以让jvm创建更多的线程。因此这种情况需要结合操作系统进行相关调整。因此:我们需要结合不同情况对tomcat 内存分配进行不同的诊断才能从根本上解决问题。以上就是针对tomcat 内存溢出的几种解决方案。篇三: java 内存溢出解决方案内存溢出问题说明 知识库
9、编号:zjdr-problem-20x、 outofmemoryerror:permgen space 及其解决方案1 、 permgen space 简介 permgen space 的全称是permanent generation space ,是指内存的永久保存区域outofmemoryerror: permgen space内存益出的原因:( 1)这一部分用于存放class 和 meta 的信息, class 在被 load 的时候被放入permgen space 区域,它和存放instance 的 heap 区域不同。(2)g5会在主程序运行期对 perm
10、genspace进行清理, 所以如果你的app会loadf艮多class勺话,就很可能由现 permgen space错误。这种错误常见在 web服务器对jsp 进行 pre pile 的时候。如果你的 web ap吓都用了大量的第三方jar ,其大小超 过了 jvm 默认的大小那么就会产生此错误信息了。2 、 outofmemmory:permgen space 异常的分析和处理permgen 原来是指 permanent generation , 本身是在 java 的垃圾收集机制(gq中产生的一个概念。java的垃圾收集 机制最早只是遍历所有的对象,如果发现某个对象没有被引用,则回收,这是在早期的java和java的时候的gc规则。 慢慢的,这样一种“愚蠢的 gc算法成为了 jvm性能的瓶颈, 在拥有大量数据的java应用程序中,gc勺算法被高度强化, 于是各种各样高效的jvm gc算法被发展了起来。permane
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025甲方支付委托合同书标准模板
- 2025城市绿化工程合同
- 2025顺丰快递转让合同样本
- 2025合法的合同劳动合同范本
- 2025套商业店铺转让合同模板
- 2025年食品级纤维素醚项目合作计划书
- 2025年连续玻璃纤维原丝毡项目建议书
- 2025年大型并网风力发电机组项目建议书
- 2025年新型膜材料及其装置合作协议书
- 2025年功能性棚模新材料及各种助剂项目合作计划书
- 质量信誉考核自评报告3篇
- 胃肠炎护理教学查房
- 药物服用指导与患者教育试题及答案
- (四调)武汉市2025届高中毕业生四月调研考试 英语试卷
- 特种设备事故压力容器应急预案演练记录
- 铁道概论道岔的结构课件
- 2025-2030中国硫代硫酸铵行业市场现状供需分析及投资评估规划分析研究报告
- (一模)2025年抚顺市普通高中高三模拟考试地理试卷(含答案)
- 工业废气治理工(技师)职业技能鉴定理论试题及答案
- 肩关节镜相关知识
- T-FJZYC 11-2024 金线莲初加工技术规程
评论
0/150
提交评论