元芳,你怎么看,Tomcat OutOfMemoryError罕见异常。。。

陶邦仁 发布于 2012/10/24 21:48
阅读 8K+
收藏 0

@xuejun_200501

请教大家一个问题 我用都是ubuntu 12.10 x64位的,安装的eclipse ,jdk 都是64位的 tomcat 7.0.21 (java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)),如果我用32位jdk运行项目不会提示错误,但是只要我用64位就提示错误Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0"
Exception in thread "http-bio-8877-exec-2"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "http-bio-8877-exec-2"
Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1" ,能否帮我看看的,谢谢,我都电脑是i7cpu 8g内存

 

加载中
0
逝水fox
逝水fox
改$TOMCAT_HOME/bin下面的catalina.sh,JVM启动参数设定JVM启动参数

-XX:+UseCompressedOoops 开启普通对象指针压缩功能,另外xms和xmx可以设定比你原来32位的时候更大,反正64位不再有那个1.5G的限制了。这样多少会有点缓解。

对自身程序优化也可以同时做一下,多试试看看造成内存溢出的原因是不是总是那一段代码,优化一下,比如不要总是从数据库一次性拖大量东西到内存。

另外之前看到有文章说不止是内存方面,性能上64位JVM比32位也有大约15%的性能差距,没有实际测试过这方面,不敢肯定,不过要改变运行环境,多少还是要各种测试的。

xuejun_200501
xuejun_200501
您好 试了下还是不行的 能否远程帮我看下什么问题都吗
0
yueqiumao
yueqiumao
元芳很忙
0
陶邦仁
陶邦仁

引用来自“月球里的猫”的答案

元芳很忙

元芳很忙,劳驾您了。。。

0
逝水fox
逝水fox
64位虚拟机因为指针膨胀等原因,同样的程序内存通常要比32位消耗的多
0
陶邦仁
陶邦仁

引用来自“逝水fox”的答案

64位虚拟机因为指针膨胀等原因,同样的程序内存通常要比32位消耗的多

那么面对这个问题该如何解决呢?谢谢

0
陶邦仁
陶邦仁

引用来自“逝水fox”的答案

改$TOMCAT_HOME/bin下面的catalina.sh,JVM启动参数设定JVM启动参数

-XX:+UseCompressedOoops 开启普通对象指针压缩功能,另外xms和xmx可以设定比你原来32位的时候更大,反正64位不再有那个1.5G的限制了。这样多少会有点缓解。

对自身程序优化也可以同时做一下,多试试看看造成内存溢出的原因是不是总是那一段代码,优化一下,比如不要总是从数据库一次性拖大量东西到内存。

另外之前看到有文章说不止是内存方面,性能上64位JVM比32位也有大约15%的性能差距,没有实际测试过这方面,不敢肯定,不过要改变运行环境,多少还是要各种测试的。

多谢指教,@xuejun_200501 可以按这个方法试试。

0
xuejun_200501
xuejun_200501
您好 试了下还是不行的 能否远程帮我看下什么问题都吗  谢谢
0
陶邦仁
陶邦仁

引用来自“xuejun_200501”的答案

您好 试了下还是不行的 能否远程帮我看下什么问题都吗  谢谢
0
冷血
冷血

你的运行参数是什么? 分配的内存是多少? 

这个错误是一启动就提示,还是运行一段时间后出来?32位下 是一直不会出现么?

xuejun_200501
xuejun_200501
您好的 我们之前的是用windows 7 32位开发的 jdk 等都是32位没问题 ,现在我们的电脑升级了 所有的都变成64位了 所以导致了这个问题 另外 才问题 是加载有涉及数据库的页面就会 不是一运行就有
0
冷血
冷血

可以用jvisualvm 加上gc插件,看下垃圾回收的情况.

之后可以再用jprofiler进行监控分析下,是什么对象占用了最多的内存.

返回顶部
顶部