- 浏览: 216446 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
zjut_ww:
非常感谢分享。。但是我在使用过程中遇到一点小问题。就是如果用来 ...
java正则表达式找出不包含特定字符串 -
mohican52:
在吗,大哥
struts2首页forward跳转后执行action -
hz2005_2009:
Y轴中文问题怎么解决?
FusionChartsFree调用json数据的简单例子 -
xixian:
chenhao_yssy 写道把num换称9.985和9.99 ...
Doublel保留两位小数 -
chenhao_yssy:
把num换称9.985和9.995试试。
Doublel保留两位小数
近期发现运行tomcat的项目,第一次可以运行,但是刷新页面后,tomcat自动退出。。。查看了tomcat的日志发现以下错误
在日志里发现中这么一句
应该就是内存溢出情况
打开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】
# # 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编程中“为了性能”需做的26件事
2013-01-09 09:47 793转载于 http://www.csdn.net/arti ... -
tomcat 配置ssl
2012-11-09 21:18 0参考http://www.blogjava.net/ch ... -
spring xml
2012-11-08 16:04 0<?xml version="1.0 ... -
Java反射机制
2012-10-28 22:06 778参见 http://blog.csdn.net/njcheny ... -
Hibernate取出需要用到的部分字段
2012-08-14 11:26 2336hibernate当数据对象有关联的对象时候,查询该数据对象, ... -
session查找
2012-06-15 20:09 0public HistoryBean findHisto ... -
eclipse下访问html文件中文乱码
2012-06-11 23:56 3138换成win7系统新装了eclipse 发现html文件本身不 ... -
java生成验证码
2012-05-07 14:26 0public void imaAjax() ... -
lucene的检索方式
2012-05-02 17:23 975Lucene 简介 Lucene 是一个基于 Java 的全文 ... -
在过滤器中通过spring上下文获取bean
2012-04-29 14:30 3593在过滤器中通过spring上下文获取bean publ ... -
tomcat配置Gzip 压缩进行优化
2012-04-18 18:02 1318Gzip 压缩可以大大提高浏览网站的速度,它的原理是,在客 ... -
配置文件
2012-04-18 14:32 0struts-interceptor.xml & ... -
json工具类
2012-04-18 14:14 0json-lib-2.2.3-jdk15.jar pac ... -
lucene的简单例子
2012-04-18 09:59 0配置文件 jdbc.driverClassName = ... -
获取tomcat项目地址
2012-04-10 14:31 0private String projectName=&quo ... -
EhCache总结
2012-04-09 16:48 0EhCache总结 1 概述 1.1 ... -
java正则表达式找出特定格式语句的关键字
2012-02-04 10:27 2887中文问句语句分析需要提取问句中的关键字 例子1 这个是什么牌子 ... -
java正则表达式找出不包含特定字符串
2011-12-24 11:45 12524参考资料 http://www.imkevinyang.com ... -
java重载
2011-12-19 11:01 0重载:方法名称相同,参数的类型或个数不同,此时称为方法的重载, ... -
tomcat6 the apr based apache tomcat native library...报错处理
2011-12-10 11:25 935tomcat6突然启动不了,看到启动时候有下面提示 The ...
相关推荐
- 提升用户体验,无需完整刷新页面。 - 减少服务器与浏览器间的数据交换,节省带宽。 - 客户端分担部分服务器工作,降低服务器负载。 - 实现局部刷新,改善用户体验。 6. AJAX的理解: AJAX允许页面在不重新...
- **会话超时**:通过设置session的超时时间,可以控制用户在多长时间无操作后自动退出聊天室。 4. **实时通信技术**: - **AJAX(异步JavaScript和XML)**:可能被用来实现不刷新整个页面的情况下更新聊天内容,...
结合Ajax(Asynchronous JavaScript and XML)技术,可以在不刷新整个页面的情况下,实现局部数据的异步加载和更新,使得用户操作更为流畅。 【HTML技术】是构建网页的基础,定义了页面的结构。在系统设计中,HTML...
- **LiveReload**:与浏览器集成,当应用重启时自动刷新页面。 - **全局设置**:可以通过全局配置文件调整Spring Boot的行为。 8. **SpringApplication** - **启动失败**:如何处理启动过程中遇到的问题。 - *...
通过`Window > Preferences > General > Startup and Shutdown`,可以配置工作空间启动时的行为,如是否自动刷新工作空间,以及在关闭最后一个窗口时是否确认退出等。 #### 4. **键盘快捷键(Keys)** 在`Window >...
- **实050**:指导读者如何设置页面重定向后的提示信息。 **3.3 动态弹出层** - **实051**:介绍如何实现全屏显示的动态弹出层。 - **实052**:演示如何使用JavaScript实现动态弹出层。 - **实053**:解释如何使用...
14.11.2时间的刷新代码544 14.11.3JRadioButton的事件响应代码545 14.11.4“确定”按钮的事件响应代码546 14.11.5“取消”按钮的事件响应代码548 14.11.6完整的程序548 14.12GUI程序设计实例3——字体选择...
例如,在用户提交表单后,可以通过 Ajax 异步加载服务器返回的数据,无需刷新整个页面。 ### 五、测试与部署 #### 1. 测试 - 单元测试:编写单元测试代码,确保每个模块的功能正确性。 - 集成测试:测试不同模块...
示例描述:本章学习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”添加到测试...