`
xixian
  • 浏览: 216446 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

刷新页面tomcat自动退出处理

 
阅读更多
近期发现运行tomcat的项目,第一次可以运行,但是刷新页面后,tomcat自动退出。。。查看了tomcat的日志发现以下错误
#
# An unexpected error has been detected by Java Runtime Environment:
#
#  EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x6d0b3f65, pid=2692, tid=2220
#
# Java VM: Java HotSpot(TM) Client VM (10.0-b22 mixed mode windows-x86)
# Problematic frame:
# C  [awt.dll+0xb3f65]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

在日志里发现中这么一句
 the space 32256K,  99% used [0x41220000, 0x43180e68, 0x43181000, 0x431a0000)

应该就是内存溢出情况
打开bin\tomcat6w.exe(本人用的是tomcat6安装版)
修改了java选项 Thread stack size 为126(原来是50)重启后问题解决~~~

其他版本tomcat配置可能参考以下资料有效~

(资源来源于网络,仅供参考学习使用)

Java内存溢出详解

一、常见的Java内存溢出有以下三种:

1. java.lang.OutOfMemoryError: Java heap space----JVM Heap(堆)溢出

JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。

可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。

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

解决方法:手动设置JVM Heap(堆)的大小。

2. java.lang.OutOfMemoryError: PermGen space ---- PermGen space溢出。

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。

为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出。

解决方法: 手动设置MaxPermSize大小

3. java.lang.StackOverflowError  ---- 栈溢出

栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。
调用构造函数的 “层”太多了,以致于把栈区溢出了。
通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。
通常递归也不要递归的层次过多,很容易溢出。

解决方法:修改程序。

 

二、解决方法

在生产环境中tomcat内存设置不好很容易出现jvm内存溢出。

1、linux下的tomcat:

修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"

2、如果tomcat 5 注册成了windows服务,以services方式启动的,则需要修改注册表中的相应键值。

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\Java,右侧的Options
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms256m -Xmx512m
重起tomcat服务,设置生效

3、如果tomcat 6 注册成了windows服务,或者windows2003下用tomcat的安装版,

在/bin/tomcat6w.exe里修改就可以了 。

4、如果要在myeclipse中启动tomcat,上述的修改就不起作用了,可如下设置:

Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的

Optional Java VM arguments中添加:-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m



三、jvm参数说明:

-server:一定要作为第一个参数,在多个CPU时性能佳

-Xms:java Heap初始大小。 默认是物理内存的1/64。
-Xmx:java heap最大值。建议均设为物理内存的一半。不可超过物理内存。

-XX:PermSize:设定内存的永久保存区初始大小,缺省值为64M。(我用visualvm.exe查看的)

-XX:MaxPermSize:设定内存的永久保存区最大大小,缺省值为64M。(我用visualvm.exe查看的)

-XX:SurvivorRatio=2  :生还者池的大小,默认是2,如果垃圾回收变成了瓶颈,您可以尝试定制生成池设置

-XX:NewSize: 新生成的池的初始大小。 缺省值为2M。

-XX:MaxNewSize: 新生成的池的最大大小。  缺省值为32M。

如果 JVM 的堆大小大于 1GB,则应该使用值:-XX:newSize=640m -XX:MaxNewSize=640m -XX:SurvivorRatio=16,或者将堆的总大小的 50% 到 60% 分配给新生成的池。调大新对象区,减少Full GC次数。

+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。

-Xss:每个线程的Stack大小,“-Xss 15120” 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.

-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间 此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。

-XX:userParNewGC 可用来设置并行收集【多CPU】
-XX:ParallelGCThreads 可用来增加并行度【多CPU】
-XX:UseParallelGC 设置后可以使用并行清除收集器【多CPU】
分享到:
评论

相关推荐

    JAVA面试题汇总-含答案.pdf

    - 提升用户体验,无需完整刷新页面。 - 减少服务器与浏览器间的数据交换,节省带宽。 - 客户端分担部分服务器工作,降低服务器负载。 - 实现局部刷新,改善用户体验。 6. AJAX的理解: AJAX允许页面在不重新...

    javaweb chatroom

    - **会话超时**:通过设置session的超时时间,可以控制用户在多长时间无操作后自动退出聊天室。 4. **实时通信技术**: - **AJAX(异步JavaScript和XML)**:可能被用来实现不刷新整个页面的情况下更新聊天内容,...

    基于SSM企业人事管理系统.doc

    结合Ajax(Asynchronous JavaScript and XML)技术,可以在不刷新整个页面的情况下,实现局部数据的异步加载和更新,使得用户操作更为流畅。 【HTML技术】是构建网页的基础,定义了页面的结构。在系统设计中,HTML...

    Spring Boot 中文文档 参考手册 中文版.pdf

    - **LiveReload**:与浏览器集成,当应用重启时自动刷新页面。 - **全局设置**:可以通过全局配置文件调整Spring Boot的行为。 8. **SpringApplication** - **启动失败**:如何处理启动过程中遇到的问题。 - *...

    MyEclipse 设置

    通过`Window > Preferences > General > Startup and Shutdown`,可以配置工作空间启动时的行为,如是否自动刷新工作空间,以及在关闭最后一个窗口时是否确认退出等。 #### 4. **键盘快捷键(Keys)** 在`Window >...

    《JSP程序开发范例宝典》完整目录程序清单

    - **实050**:指导读者如何设置页面重定向后的提示信息。 **3.3 动态弹出层** - **实051**:介绍如何实现全屏显示的动态弹出层。 - **实052**:演示如何使用JavaScript实现动态弹出层。 - **实053**:解释如何使用...

    Java开发技术大全 电子版

    14.11.2时间的刷新代码544 14.11.3JRadioButton的事件响应代码545 14.11.4“确定”按钮的事件响应代码546 14.11.5“取消”按钮的事件响应代码548 14.11.6完整的程序548 14.12GUI程序设计实例3——字体选择...

    基于ssm+mysql学生社团管理系统源码数据库.docx

    例如,在用户提交表单后,可以通过 Ajax 异步加载服务器返回的数据,无需刷新整个页面。 ### 五、测试与部署 #### 1. 测试 - 单元测试:编写单元测试代码,确保每个模块的功能正确性。 - 集成测试:测试不同模块...

    Java开发技术大全(500个源代码).

    示例描述:本章学习Java的异常处理。 demoException_1.java 异常示例1 demoException_2.java 异常示例2 demoException_3.java 异常示例3 demoException_4.java 异常示例4 demoException_5.java 异常示例5 ...

    测试培训教材

    设置自动化测试失败时采取的措施: 设置测试失败时邮件通知相关人员: 为测试集添加测试用例 把测试计划树中的“Cruises”包含的所有测试用例以及“Airline Preference”、“Number of Passengers”添加到测试...

Global site tag (gtag.js) - Google Analytics