Tomcat出现_PermGen_space解决方案

合集下载

tomcat常见的错误与解决方案小结

tomcat常见的错误与解决方案小结

tomcat常见的错误与解决⽅案⼩结⼀、tomcat启动时错误问题1:The JAVA_HOME environment variable is not defined This environment variable is needed to run this program;解决:没有在tomcat的配置⽂件.bash_profile中设置环境变量JAVA_HOME,具体设置⽅法为:加⼊如下⼏⾏:JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准)export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.jarexport CLASSPATH问题2:Error occurred during initialization of VM Could not reserve enough space for object heap解决:在tomcat的bin⽬录下,catalina.sh⽂件的tomcat内存参数配置过⼤,超过机器可⽤内存总数造成,修改到适当的值即可,修改的参数为:JAVA_OPTS="-Xms50m -Xmx60m"问题3:tomcat启动时报某个⽬录没有权限,启动失败,或者不能执⾏某些jsp页解决:tomcat需要tomcat⽤户具有⼀些⽬录和⽂件的相应权限, 所有⽬录应该具有读写执⾏(浏览)的权限,jsp,class⽂件应该最少具有读权限, ⼀些⽂件需要写权限,下⾯是已知的需要读写权限⽂件的列表:$CATALINA_HOME/logs下所有⽂件$CATALINA_HOME/work下所有⽂件$CATALINA_HOME/publish/main/count.txt⽂件$CATALINA_HOME/publish/chatroom/resource下的所有.xml⽂件所有上传图⽚⽬录都需要写权限。

帆软认证报表工程师(FCRA)考试(试卷一)

帆软认证报表工程师(FCRA)考试(试卷一)

帆软认证报表工程师(FCRA)考试• 1.在表单设计时,参数栏默认就存在模板上方的,可以直接将控件放到上面。

正确错误• 2.在模板中添加的内置数据集可以使用sql()函数。

正确错误• 3.决策系统的颜色色调是可以自己设置的正确错误• 4.决策系统中默认登录后的首页是不能使用FR以外的网页地址正确错误• 5.决策系统中的左侧菜单是不可以修改的正确错误• 6.决策系统中的用户,一旦添加,不能删除,只能编辑正确错误•7.决策系统中可以查询系统日志情况正确错误•8.模板单元格的内容是可以设置左缩进的正确错误•9.FR的设计器中,有提供切换工作目录功能,达到远程进行报表制作的目的正确错误•10.FR10.0的表单具有自适应功能正确错误•11.FR填报的报表,不支持居中显示正确错误•12.图表交互属性中监控刷新,时间间隔最多能设置成999s正确错误•13.在设计报表时,重复标题行可以不连续()正确错误•14.参数界面组件只能添加在表单的顶部错误•15.求每个人的各科目得分小于80的总科目数,在G2单元格输入如图所示的公式,是否正确?正确错误•16.移动端支持所有的新特性图表正确错误•17.移动端支持悬浮图表正确错误•18.移动端在超级链接中,可以进行文件下载正确错误•19.V3版本以后的微信插件能实现报表平台与多个企业微信号做集成正确错误•20.tomcat出现OutOfMemoryError: PermGen space报错时,可以加大-XX:PermSize 和 -XX:MaxPermSize处理。

正确错误•21.映射就是把路由器的一个或几个端口直接指向内网正确错误•22.配置同步用户数据集以后,需要重新登录正确错误•23.报表中支持输入公式的地方均可以引用参数,参数引用直接使用 $para 即可将参数值传递过来。

正确错误•24.模板参数和全局参数都属于模板参数的范畴,全局参数的使用方法与模板参数一致,它们之间的区别只是使用范围不同。

tomcat常见错误与解决方法

tomcat常见错误与解决方法

上海纽斯达科技tomcat常见错误与解决方法上海纽斯达科技有限公司2014-10-25文档状态目的:在tomcat 服务器出现故障时,能快速定位并解决相关错误。

保密:本文档仅供内部使用,请勿外传概述:tomcat 常见错误与问题之解决方法技术指南。

安装环境:系统环境:redhat enterprise 6.5 64bit文件状态:【 】草稿【 】修改稿 【√】正式发布 文档编号 Nsdkj-779 保 密 等 级 限制 作 者 刘恒亮 最后完成日期 2014-12-25 审 核 人最后审核日期 2014-12-25 批 准 人最后批准日期 2014-12-25注释:Q代表问题,A代表错误解决办法Q:在以tomcat用户启动tomcat时提示:The JAVA_HOME environment variable is not defined This environment variable is needed to run this programA:没有在在tomcat的配置文件.bash_profile中设置环境变量JAVA_HOME,具体设置方法为:加入如下几行:JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准)export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/li b/dt.jarexport CLASSPATHQ: 在以tomcat用户登录linux系统后,提示:-bash: /home/tomcat/j2sdk1.4.2_08: is a directory-bash:/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.ja r:没有那个文件或目录。

帆软认证报表工程师(FCRA)考试(试卷一)

帆软认证报表工程师(FCRA)考试(试卷一)

帆软认证报表工程师(FCRA)考试• 1.在表单设计时,参数栏默认就存在模板上方的,可以直接将控件放到上面。

正确错误• 2.在模板中添加的内置数据集可以使用sql()函数。

正确错误• 3.决策系统的颜色色调是可以自己设置的正确错误• 4.决策系统中默认登录后的首页是不能使用FR以外的网页地址正确错误• 5.决策系统中的左侧菜单是不可以修改的正确错误• 6.决策系统中的用户,一旦添加,不能删除,只能编辑正确错误•7.决策系统中可以查询系统日志情况错误•8.模板单元格的内容是可以设置左缩进的正确错误•9.FR的设计器中,有提供切换工作目录功能,达到远程进行报表制作的目的正确错误•10.FR10.0的表单具有自适应功能正确错误•11.FR填报的报表,不支持居中显示正确错误•12.图表交互属性中监控刷新,时间间隔最多能设置成999s正确错误•13.在设计报表时,重复标题行可以不连续()正确错误•14.参数界面组件只能添加在表单的顶部错误•15.求每个人的各科目得分小于80的总科目数,在G2单元格输入如图所示的公式,是否正确?正确错误•16.移动端支持所有的新特性图表正确错误•17.移动端支持悬浮图表正确错误•18.移动端在超级链接中,可以进行文件下载正确错误•19.V3版本以后的微信插件能实现报表平台与多个企业微信号做集成正确错误•20.tomcat出现OutOfMemoryError:PermGen space报错时,可以加大-XX:PermSize 和-XX:MaxPermSize处理。

错误•21.映射就是把路由器的一个或几个端口直接指向内网正确错误•22.配置同步用户数据集以后,需要重新登录正确错误•23.报表中支持输入公式的地方均可以引用参数,参数引用直接使用$para 即可将参数值传递过来。

正确错误•24.模板参数和全局参数都属于模板参数的范畴,全局参数的使用方法与模板参数一致,它们之间的区别只是使用范围不同。

OutOfMemoryError_8种典型案例分享

OutOfMemoryError_8种典型案例分享

然后在 SpringMVC的拦截器(Interceptor)实现类中, 在 preHandle 方法里, 将 request 对象保存到 ThreadLocal 中:
/** * 登录拦截器 */ public class LoginCheckInterceptor implements HandlerInterceptor { private List<String> excludeList = new ArrayList<String>(); public void setExcludeList(List<String> excludeList) { this.excludeList = excludeList; } private boolean validURI(HttpServletRequest request){ // 如果在排除列表中 String uri = request.getRequestURI(); Iterator<String> iterator = excludeList.iterator(); while (iterator.hasNext()) { String exURI = iterator.next(); if(null != exURI && uri.contains(exURI)){ return true; } } // 可以进行登录和权限之类的判断 LoginUser user = ControllerBase.getLoginUser(request); if(null != user){ return true; } // 未登录,不允许 return false; } private void initRequestThreadLocal(HttpServletRequest request){ ControllerBase.setRequest(request); request.setAttribute("basePath", ControllerBase.basePathLessSlash(request)); } private void removeRequestThreadLocal(){ ControllerBase.setRequest(null); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { initRequestThreadLocal(request); // 如果不允许操作,则返回false即可 if (false == validURI(request)) { // 此处抛出异常,允许进行异常统一处理 throw new NeedLoginException(); } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { removeRequestThreadLocal();

完美解决PermGenspace异常的问题

完美解决PermGenspace异常的问题

完美解决PermGenspace异常的问题开发中遇到Eclipse报错:ng.OutOfMemoryError: PermGen space。

PermGen space百度翻译为:永久区域内存不⾜。

1. 先来⼀张jvm结构图:内存不⾜问题⼀般都是发⽣在'堆‘上,GC作⽤区域也是在'堆‘上。

2. 这个'堆‘⼜划分成了好⼏块区域,包括:新⽣代:包括伊甸园区和存活区。

⽼年代:永久带:jdk1.8后变成元空间,元空间不再占⽤堆中的空间,⽽永久带却是在堆中开辟空间。

可以发现,堆中就有个永久区。

永久区的内存溢出,其实就是堆的内存不够⽤。

只需要调⼤堆的内存⼤⼩就可以解决问题。

3. 调整堆⼤⼩的参数:-Xms256m -Xmx1024m-Xms:堆的初始化⼤⼩,这⾥设置成了256m.-Xmx:堆最⼤的⼤⼩,这个设置成了1024m.这⾥⾯就存在了⼀个可伸缩的空间,⽽这个空间的存在会损耗服务的性能。

因为扩容和释放空间都是有性能损耗的。

最好的办法就是:-Xms和-Xmx设置成同样的⼤⼩。

这样就不存在可伸缩的空间了。

4. jvm参数的配置位置。

a. 如果是使⽤tomcat服务:修改tomcat/bin⽬录下的catalina.bat。

(windows环境下修改⽂件catalina.bat, linux环境下修改⽂件catalina.sh)配置在⽂件的第⼀⾏: b.如果是eclipse修改eclipse的Run Configurations。

(如果是debug模式,修改Debug Configurations。

)写在此处,⽅便拷贝:-Xms256m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=512mc.如果已经被配置成了服务这种情况,就需要修改注册表了。

c1. regedit命令打开注册表。

c2. 找到配置的tomcat服务。

修改:JvmMs,JvmMx,Options⾥⾯的参数值。

tomcat报错:虚拟内存不足,启动失败;页面文件太小,无法完成操作

tomcat报错:虚拟内存不足,启动失败;页面文件太小,无法完成操作

tomcat报错:虚拟内存不足,启动失败;页面文件太小,无法
完成操作
服务器上安装了tomcat和jdk后,tomcat总是启动失败,错误日志显示:虚拟内存不足,启动失败,或者是:Error 0x800705af: 页面文件太小,无法完成操作。

后一种错误其实和前一种是一样的,只是不同的电脑系统可能显示不同。

解决办法:增大虚拟内存
步骤:
1、右键点【我的电脑】-【属性】-【高级】选项卡,
2、在【性能】栏内点【设置】-继续点【高级】选项卡,
3、在【虚拟内存】栏内点【更改】-弹出【虚拟内存】对话框,就可以设置了。

4、单选【自定义大小】,在【初始大小】里设置1024,在【最大值】里设置2048(不能超过32位操作系统的内存寻址范围——4GB)。

最后点一下【设置】可生效。

如有必要,可重启电脑。

建议将虚拟内存移动到除C盘之外的其它盘,例如D盘。

以减轻对系统盘的压力。

方法:仍在【虚拟内存】对话框,点击C盘卷标,单选【无分页大小】。

再选D盘卷标,单选【自定义大小】,设置【初始大小】和【最大值】即可。

虚拟内存最大值一般设置为物理内存的2倍。

linux下jira安装破解以及汉化

linux下jira安装破解以及汉化

Linux上Jira 5.0的安装、破解及汉化博客分类:java历程因为机子上要同时部署jira,confluence等多个平台,因此jira独立安装明显浪费资源,所以采用war包方式安装,共用一个tomcat。

准备工作:下载JIRA,下载地址:/software/jira/JIRADownloadCenter.jspa,目前为止,最新版本是5.0,选择JIRA 5.0 WAR的压缩包。

保证主机上的JDK,MySQL都已经安装完毕,Tomcat也已经部署完备。

同时检查环境变量中$JAVA_HOME等是否准确配置,检查/etc/profile文件是否准确。

这些基本步骤这里不再具体说明。

在mysql数据库中,建立jira所用的数据库,并给jira用户赋予权限。

Sql代码1.mysql> create database jiradb;2.mysql> grant all on jiradb.* to 'jira'@'localhost' identified by'jira';3.mysql> flush privileges;创建jira运行时所使用的工作目录,路径自己定:Java代码1.# mkdirusr/local/workhome/jira_home部署jira:将下载的atlassian-jira-5.0-war.tar.gz压缩包放到tomcat的webapps目录运行命令,将压缩包进行解压:Java代码1.# tar zxvf atlassian-jira-5.0-war.tar.gz进行解压后得到的目录:Java代码1.# cd atlassian-jira-5.0-war运行 build.sh 脚本,会自动进行构建,完成后,进行dist-generic目录,将里面的war包复制到tomcat的webapps目录下:Java代码1.# ./build.sh2.# cd dist-generic/3.# cp atlassian-jira-5.0.war /usr/local/tomcat/webapps/运行tomcat,tomcat会自动将atlassian-jira-5.0.war进行解压缩将解压缩后的目录atlassian-jira-5.0移动到一个单独的工作文件夹,方便管理,如:/usr/local/atlassian-jira-5.0这一步看个人喜好,如果是直接在webapps目录下运行,可省去。

tomcat OutOfMemory错误解决方法

tomcat OutOfMemory错误解决方法

tomcat OutOfMemory错误解决方法部署应用服务到tomcat下,可能会抛出内存溢出异常,如下:Exception in thread "Timer-1" ng.OutOfMemoryError: PermGen space为了解决tomcat在大进行大并发请求时,出现内存溢出的问题,请修改tomcat的内存大小,其中分为以下两种方式:一、使用catalina.bat 等命令行方式运行的tomcat1、windows环境下,修改tomcat\bin\Catalina.bat 文件在166行左右rem Execute Java with the applicable properties ”以下每行%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS%-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%"-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%"-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%在%DEBUG_OPTS% 后面添加-Xms256m -Xmx512m2、linux环境下,打开在Tomcat的安装目录的bin文件的 ./bin/catalina.sh 文件,进入编辑状态.在注释后面加上如下脚本:JAVA_OPTS='-Xms512m -Xmx1024m'JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"或者,在echo "Using CATALINA_BASE: $CATALINA_BASE" 下添加一行echo "Using CATALINA_BASE: $CATALINA_BASE"JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m"echo "Using CATALINA_HOME: $CATALINA_HOME"echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"说明:JAVA_OPTS='-Xms512m -Xmx1024m' 是设置Tomcat使用的内存的大小; -XX:PermSize=64M-XX:MaxPermSize=256m 指定类空间(用于加载类)的内存大小保存后,重新以命令行的方式运行tomcat ,即可,然后通过最后面介绍的如何观察tomcat现有内存情况的方法进行查看是否已经变更成功。

OutOfMemoryError PermGen space 的解决办法(头痛了几天)

OutOfMemoryError PermGen space 的解决办法(头痛了几天)

解决OutOfMemoryError: PermGen space,过程是痛苦的,结果是舒畅的最近自己的程序在Redeploy重新部署的时候,老提示OutOfMemoryError: PermGen space错误,在网络上搜索了相关的资料,但是按照做后还是存在这个问题。

由于我是第一次碰到这个问题,花费了我2天时间,过程比较痛苦,结果还是比较圆满的。

我将我的经历写下来,供我自己以后参考,也提供给大家分享。

在网络上关于OutOfMemoryError: PermGen space的解决办法很多了,但是有的办法都是互相转发,真假难辨。

有的可能还产生误导。

我的环境是Myeclips 8.5、tomcat6.x,试过了很多办法后,比如:文档《Linux 和 Windows修改Java虚拟机内存大小》(/blog/1189541),中的办法,我都试过了,还是不行;当然还参考了很多其他资料,然后进一步研究JVM的优化等,我就是想知道我配置的内存参数应该够大了,为什么还是溢出,难道没有生效,那我就需要找到配置后系统认可的内存参数是多少,参考网络上的知识,启动了JDK自带的工具,在\jdk1.6.0_10\bin下面的jconsole.exe内存监控的工具,点击进入如下:选择PID为4472的这个进程,点击,进入如下界面,选择内存页,并且选择图表中最后一个选项的“内存池“Perm Gen”,下面的详细信息显示的是:这个地方的最大值是65536Kb,也就是64M,我于是就找到原因了,64M肯定会导致溢出,但是我配置了几百兆的内存空间就是不生效呢。

注意,这个是我在myclipse中启动的tomcat 看到的结果。

接下来,我进入bin/catalina.bat文件中的“rem ----- Execute The Requested Command -”这个后面增加了下面的语句set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m-XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=512m,这个地方注意增加的位置是在rem ----- Execute The Requested Command –后面,最好set JAVA_OPTS=%JAVA_OPTS% 这个也要加上,这个网络上好多文档没有将这个位置交代清楚,或者说的不是这个地方,是不是其他地方也可以,我没有试。

润乾内存溢出解决方案

润乾内存溢出解决方案

内存溢出作为软件使用过程中极其不希望看到的难题,一直困扰着软件开发与使用者。

当然在报表应用的使用过程中,如果配置或使用不当也会出现内存溢出的问题。

出现内存溢出的问题我们要敢于面对,要通过适当的排查方法和相应的解决步骤一步一步找到问题出现的原因并最终解决掉该问题。

本文对使用报表过程中出现内存溢出问题进行简单地分析,给出一些建议性的排查步骤和解决方法。

排查步骤与解决办法1 定位问题首先我们要判断出现的问题是否是由于内存溢出引起的,典型的后台信息是带有Out Of Memory字样,但是也不排除其他内存溢出的提示,如tomcat内存溢出可出现三种提示信息:Java heap space、PermGen space和unable to create new native thread。

而有时线程死锁也会导致应用挂掉。

所以我们看到具体出错信息如果判断不出是何种问题,最好上网查询确认一下。

2 判断是否与报表有关一般来说,任何应用都可能出现内存溢出,所以当我们确定出现了内存溢出,接下来要做的就是划分区域,判断内存溢出是哪部分引起的。

一般报表应用与客户自己应用相结合的系统出现内存溢出的问题,需要判断该问题是否是由报表引起的?具体方法是单独部署报表应用并执行原操作,看是否会出现内存溢出。

若此步骤问题重现,则按照如下步骤进行;否则,可能说明与报表无关,当然也可以按照下面的步骤继续进行排查。

3 查找问题出现的共性一般内存溢出不会只出现一次,这就要求我们记录每次出项问题的共性。

如:是否访问某张特定报表时出现?是否访问量达到一定程度时出现?是否访问一些大数据量报表时出现?下面给出在如下情况下的建议设置:3.1 访问某个特定报表时若我们发现,内存溢出每次均出现在访问系统中某张报表时(一般后台信息也有体现),这时我们就需要拿这张报表看看了,主要查看报表设计是否合理、表达式以及sql语句是否性能极其低下、报表计算是否非常复杂等。

解决 Tomcat 服务崩溃的问题

解决 Tomcat 服务崩溃的问题

解决 Tomcat 服务崩溃的问题Tomcat 服务器是一种用来处理 Web 应用程序的开源服务器。

由于其高效、稳定的特点,近年来在 Web 开发领域得到了广泛应用。

但是,有时候 Tomcat 服务也会遇到崩溃的问题,这对于系统管理员和开发人员来说都是非常头痛的事情。

在本文中,我们将探讨如何解决 Tomcat 服务崩溃的问题,以使我们的 Web 应用程序能够更加稳定地运行。

1. 清理 Tomcat 服务器日志当 Tomcat 服务器出现崩溃的问题时,第一个要想到的就是查看 Tomcat 服务器的日志文件。

日志文件中记录了服务器的运行状态、错误信息以及异常堆栈等信息,可以帮助我们定位问题的根源。

如果日志文件过大,可能会占用过多的硬盘空间,甚至会导致服务器出现异常。

因此,我们建议定期清理 Tomcat 服务器日志文件,保留最近一段时间内的日志信息即可。

清理日志的方法:- 在 Tomcat 安装目录下找到 logs 目录,删除过期的日志文件。

- 修改 Tomcat 的 logging.properties 配置文件,配置日志的输出级别和日志的保存周期。

可根据自身需求来设置级别和周期。

2. 优化 JVM 参数设置JVM 是 Java 虚拟机,是 Java 程序的核心组件之一。

Tomcat 服务器是运行在 JVM 上的 Java 应用程序,因此 JVM 参数的设置对Tomcat 服务器的性能和稳定性有很大影响。

我们建议对 JVM 参数进行优化设置,以提升 Tomcat 服务器的运行效率和稳定性。

优化 JVM 参数的方法:- 适当增加 JVM 堆空间大小。

在 Tomcat 安装目录下的 bin 目录中的 catalina.bat (Windows)/ catalina.sh (Linux)文件中可以找到 JVM 启动参数,增加 -Xms 和 -Xmx 参数来增加 JVM 堆空间大小。

- 设置内存溢出的报警机制。

CMIS服务器问题解决方案

CMIS服务器问题解决方案

CMIS服务宕机
问题现象:运行一段时间CMIS、综合素质评价系统、高中课程管理系统等应用不能访问,网页无法打开,tomcat系统日志信息出现类似这样的信息内容:
“ng.OutOfMemoryError: PermGenspace”
产生原因:系统内存的永久保存区域(Permanent Generation space)太小,导致内存溢出,如果系统应用很多,尤其是应用到反射机制而动态加载的CLASS很多,在用户操作过程中就会很容易出现服务宕机的现象,高中综合素质评价和课程管理系统正是基于反射机制开发而成。

解决方案:解决此类的问题的方法之一就是增大永久内存,步骤如下,
第一步:下载文件“注册信息.reg”
第二步:双击运行“注册信息.reg”系统提示更新是否注册表,如图1
点击按钮“是(Y)”,如图2,点击“确定”完成修改注册信息。

第三步:重新启动服务器。

内存溢出出现原因及解决方案

内存溢出出现原因及解决方案

内存溢出出现原因及解决方案篇一:内存溢出解决方案内存溢出解决方案篇二:内存溢出的三种情况及系统配置解决方案近经常有人咨询相关内存溢出的问题,在生产环境中tomcat内存设置不好很容易出现内存溢出。

造成内存原因是不一样的,当然处理方式也不一样。

这里根据平时遇到的情况和相关资料进行一个总结。

常见的一般会有下面三种情况:: Java heap space: PermGen space: unable to create new native thread.Tomcat内存溢出解决方案对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。

(-Xms -Xmx -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为操作系统对内存无限制。

)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的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

内存溢出错误解决

内存溢出错误解决

ng.‎O utOfMemor‎y Error: Pe‎r mGen spac‎e及其解决方法‎PermGen s‎p ace的全称是Pe‎r manent Ge‎n eration s‎p ace,是指内存的‎永久保存区域OutO‎f MemoryErr‎o r: PermGe‎n space从表面‎上看就是内存益出,解‎决方法也一定是加大内‎存。

说说为什么会内存‎益出:这一部分用于存‎放Class和Met‎a的信息,Class‎在被Load的时候‎被放入PermGen‎space区域,它‎和和存放Instan‎c e的Heap区域不‎同,GC(Garba‎g e Collect‎i on)不会在主程序‎运行期对PermGe‎n space进行清‎理,所以如果你的AP‎P会LOAD 很多CL‎A SS的话,就很可能‎出现PermGen ‎s pace错误。

这种‎错误常见在web服务‎器对JSP 进行pre‎compile的时‎候。

改正方法:-Xm‎s256m -Xmx‎256m -XX:M‎a xNewSize=‎256m-XX:M‎a xPermSize‎=256m 2、在t‎o mcat中rede‎p loy时出现out‎o fmemory的错‎误. 可以有以下几个‎方面的原因:1‎,使用了proxoo‎l,因为proxoo‎l内部包含了一个老版‎本的cglib.‎2, log4j,‎最好不用,只用com‎m on-loggin‎g3, 老版本‎的cglib,快点更‎新到最新版。

4,‎更新到最新的hibe‎r nate3.2 3‎、这里以tom‎c at环境为例,其它‎W EB服务器如jbo‎s s,weblogi‎c等是同一个道理。

‎一、‎n g.OutOfMe‎m oryError:‎PermGen s‎p ace PermG‎e n space的全‎称是Permanen‎t Generati‎o n space,是‎指内存的永久保存区域‎,这块内存主要是被‎J VM存放Class‎和Meta信息的,C‎l ass在被Load‎e r时就会被放到Pe‎r mGen spac‎e中, 它和存放类实‎例(Instance‎)的Heap区域不同‎,GC(Garbag‎e Collecti‎o n)不会在主程序运‎行期对PermGe‎n space进行清‎理,所以如果你的应用‎中有很多CLASS的‎话,就很可能出现Pe‎r mGen spac‎e错误, 这种错误常‎见在web服务器对J‎S P进行pre co‎m pile的时候。

内存溢出的解决思路

内存溢出的解决思路

内存溢出的解决思路内存溢出是指应⽤系统中存在⽆法回收的内存或使⽤的内存过多,最终使得程序运⾏要⽤到的内存⼤于虚拟机能提供的最⼤内存。

引起内存溢出的原因有很多种,常见的有以下⼏种: 1.内存中加载的数据量过于庞⼤,如⼀次从数据库取出过多数据; 2.集合类中有对对象的引⽤,使⽤完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产⽣过多重复的对象实体; 4.使⽤的第三⽅软件中的BUG; 5.启动参数内存值设定的过⼩;内存溢出的解决⽅案:第⼀步,修改JVM启动参数,直接增加内存。

(-Xms,-Xmx参数⼀定不要忘记加。

) 第⼆步,检查错误⽇志,查看“OutOfMemory”错误前是否有其它异常或错误。

第三步,对代码进⾏⾛查和分析,找出可能发⽣内存溢出的位置。

重点排查以下⼏点: 1.检查对数据库查询中,是否有⼀次获得全部数据的查询。

⼀般来说,如果⼀次取⼗万条记录到内存,就可能引起内存溢出。

这个问题⽐较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,⼀次查询就有可能引起内存溢出。

因此对于数据库查询尽量采⽤分页的⽅式查询。

2.检查代码中是否有死循环或递归调⽤。

3.检查是否有⼤循环重复产⽣新对象实体。

4.检查对数据库查询中,是否有⼀次获得全部数据的查询。

⼀般来说,如果⼀次取⼗万条记录到内存,就可能引起内存溢出。

这个问题⽐较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,⼀次查询就有可能引起内存溢出。

因此对于数据库查询尽量采⽤分页的⽅式查询。

5.检查List、MAP等集合对象是否有使⽤完后,未清除的问题。

List、MAP等集合对象会始终存有对对象的引⽤,使得这些对象不能被GC回收。

第四步,使⽤内存查看⼯具动态查看内存使⽤情况从内存溢出看Java 环境中的内存结构 作为有个java程序员,我想⼤家对下⾯出现的这⼏个场景并不陌⽣,倍感亲切,深恶痛绝,抓⼼挠肝,⼀定会回过头来问为什么为什么为什么会这样,嘿嘿,让我们看⼀下我们⽇常在开发过程中接触内存溢出的异常: Exception in thread "main" [Full ng.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Unknown Source)at java.util.Arrays.copyOf(Unknown Source)at java.util.ArrayList.grow(Unknown Source)at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)at java.util.ArrayList.ensureCapacityInternal(Unknown Source)at java.util.ArrayList.add(Unknown Source)at oom.HeapOOM.main(HeapOOM.java:21) Exception in thread "main" ng.StackOverflowErrorat java.nio.CharBuffer.arrayOffset(Unknown Source)at sun.nio.cs.UTF_8.updatePositions(Unknown Source)at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(Unknown Source)at sun.nio.cs.UTF_8$Encoder.encodeLoop(Unknown Source)at java.nio.charset.CharsetEncoder.encode(Unknown Source)at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)at sun.nio.cs.StreamEncoder.write(Unknown Source)at java.io.OutputStreamWriter.write(Unknown Source)at java.io.BufferedWriter.flushBuffer(Unknown Source)at java.io.PrintStream.write(Unknown Source)at java.io.PrintStream.print(Unknown Source)at java.io.PrintStream.println(Unknown Source)ng.OutOfMemoryError: PermGen spaceException in thread "main" ng.OutOfMemoryErrorat sun.misc.Unsafe.allocateMemory(Native Method)at oom.DirectMemoryOOM.main(DirectMemoryOOM.java:23) 是不是有⼤家很熟悉的,遇见这样的问题解决起来可能不简单,但是如果现在让⼤家写个程序,故意让程序出现下⾯的异常,估计能很快写出来的也不是很多,这就要求开发⼈员对于java内存区域以及jvm规范有⽐较深的了解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Tomcat出现 PermGen space解决方案PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space 中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。

如果你的WEB APP 下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法:1. 手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512mcatalina.sh下为:JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"2. 将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

如果遇到这个异常:ng.OutOfMemoryError: Java heap space 是什么原因呢?解释:Heap size 设置JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。

Heap size 的大小是Young Generation 和Tenured Generaion 之和。

提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:手动设置Heap size修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m或修改catalina.sh在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"另外看到了另外一个帖子,觉得挺好,摘抄如下:主题: 分析ng.OutOfMemoryError: PermGen spaceSUN JDK+Tomcat 5.5.20运行服务的时候遇到问题,服务器跑几天后就会挂掉,并报ng.OutOfMemoryError: PermGen space异常。

发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出。

然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。

还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类。

但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat在Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生。

于是有人对更基础的JVM做了检查,发现了问题的关键。

原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。

本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。

而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!2003年的时候就有一个bug报告给sun,但是到现在,这个bug还没有close!有人在这个bug加了句评语:“A bug this critical is open since 2003? Absolutely shameful.”我觉得SUN在这个BUG上确实有些丢脸。

对这个bug最彻底的解决办法就是不要用SUN的JDK,而改用BEA的 JRokit.打不过,还逃不过吗?有众多的选择,这就是开源的好。

:)最后,给出几篇文章供大家学习参考:Java虚拟机的选项:/show/3/7/20061112220131.htmHot Spot JVM5中的GC调优:/show/3/7/20061112220201.htm1、PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。

说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

这种错误常见在web服务器对JSP进行pre compile的时候。

改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m2、在tomcat中redeploy时出现outofmemory的错误.可以有以下几个方面的原因:1,使用了proxool,因为proxool内部包含了一个老版本的cglib.2, log4j,最好不用,只用common-logging3, 老版本的cglib,快点更新到最新版。

4,更新到最新的hibernate3.23、这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。

一、ng.OutOfMemoryError: PermGen spacePermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。

如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法:手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

二、ng.OutOfMemoryError: Java heap spaceHeap size 设置JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

可以利用JVM 提供的-Xmn -Xms -Xmx等选项可进行设置。

Heap size 的大小是Young Generation 和Tenured Generaion 之和。

提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:手动设置Heap size修改TOMCAT_HOME/bin/catalina.sh在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"三、实例,以下给出1G内存环境下java jvm 的参数设置参考:JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "。

相关文档
最新文档