解决Java中OutOfMemoryError的问题

作者:lijiao 时间:2023-01-26 13:51:03 

目前为止,我遇到使用Tomcat有三种情况:第一,使用Eclipse,在Eclipse中配置Tomcat。第二,直接在Tomcat中部署项目。第三将Tomcat安装为windows服务。
在这三种情况下,出现OutOfMemoryError.该怎么解决呢?这里我不得不提我被网上那些不负责任的文章害得很惨。各种设置内存的方法都试了,可就是不起作用。下面我说的这几种方法都是我亲自试验过的,没有问题。

第一种情况:
 如图:我用红色框框出来的。其中Xms和Xmx是增加java虚拟机初始堆大小和最大堆大小参数,主要是解决由于Java Heap Space不足造成的原因。XX:PermSize和XX:MaxPermSize是增加初始永久保存区域大小和最大永久保存区域大小的参数,主要解决程序中使用了大量的jar或class,java虚拟机装载类的空间不够,与Permanent Generation space有关。

解决Java中OutOfMemoryError的问题

第二种情况:
直接把编译好的项目放在Tomcat中,采用startup.bat启动Tomcat服务。如下在Tomca的bin文件夹下:

解决Java中OutOfMemoryError的问题

这种情况下,我们要修改catalina.bat里面的参数。打开它。找到这两句:
  rem Guess CATALINA_HOME if not defined
  set "CURRENT_DIR=%cd%"
 在这两句之上加上这句,一定要之上:set "JAVA_OPTS=-Xms512M -Xmx1024M -XX:PermSize=256m -XX:MaxPermSize=512m"
 网上很多类似的,但是试过好多都不行,一定要注意:它的位置,和引号等细节。

第三种情况:
如果你的tomcat是注册为windows服务并且是以服务方式启动的,那么上面的方法就无效了,因为这时tomcat启动是读取注册表的参数,而不是读取批处理文件的参数,这时我们来这样设置jvm参数。:在Tomcat的bin目录下找到tomcat7w.exe,打开:

解决Java中OutOfMemoryError的问题

  在java选项下:下方的Initial memory pool就是初始化堆内存大小,Maximun memory pool是最大堆内存大小。而要设置Perm Gen池的大小就要在Java Option里面加参数了,在里面加上:
-Dcatalina.base=%tomcat_home%
-Dcatalina.home=%tomcat_home%
-Djava.endorsed.dirs=%tomcat_home%\endorsed
-Djava.io.tmpdir=%tomcat_home%\temp
-XX:PermSize=256M
-XX:MaxPermSize=256M
-XX:ReservedCodeCacheSize=48M
-Duser.timezone=GMT+08
(每一行后面不要有空格)这种方法我试过了,管用呢。还可以通过直接在注册表中添加参数。这个就不介绍了,自己没试过。
  其实解决Tomcat内存的问题并不难,难得是你怎么知道这是由于Tomcat内存溢出异常造成的。我们之前在这个问题上困扰了好久。如果使用Eclipse,console里会打印出错误信息,那么直接就可以判断是OutOfMemoryError,如果是直接部署到Tomcat中,以startup.bat启动,则也可以看到打印出来的错误信息。可是我们偏偏是把Tomcat服务安装成了Windows的服务,那么看不到任何错误的提示。项目启动后,一直都处于等待状态,很慢很慢,让人摸不着头脑, 正赶上数据库也弄罢工,就一直以为是数据库问题。总之一句话:经验不足。

标签:java,OutOfMemoryError
0
投稿

猜你喜欢

  • C#泛型的使用案例

    2023-10-01 23:24:00
  • java语法糖之jdk迭代的新特性汇总

    2022-07-09 10:05:19
  • Android中的popupwindow进入和退出的动画效果

    2022-05-24 19:46:15
  • 浅谈Java内存区域与对象创建过程

    2022-08-31 17:56:25
  • Spring5新功能@Nullable注解及函数式注册对象

    2021-10-27 05:49:44
  • C#实现窗体淡入淡出效果的方法总结

    2021-05-28 08:23:37
  • Android开发实现简单计算器功能

    2022-10-17 09:18:16
  • Android开发必知 九种对话框的实现方法

    2022-10-23 07:47:26
  • C# InitializeComponent()方法案例详解

    2022-06-12 03:07:06
  • java中单例模式讲解

    2022-05-22 14:24:07
  • 百度人脸识别之人脸识别FaceIdentify(签到考勤)

    2022-08-24 18:25:03
  • Java servlet、filter、listener、interceptor之间的区别和联系

    2023-11-02 15:32:17
  • spring boot基于Java的容器配置讲解

    2023-11-09 05:24:54
  • unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)

    2022-11-09 16:18:56
  • ViewPager判断是向左划还是右划的实例

    2023-12-10 04:53:18
  • Android UI设计系列之ImageView实现ProgressBar旋转效果(1)

    2021-06-07 11:08:21
  • C#中判断、验证字符串是否为日期格式的实现代码

    2021-06-05 01:57:26
  • Android Studio快捷键生成TAG、Log.x日志输出介绍

    2022-03-14 02:10:37
  • springboot vue 跨域问题的解决

    2023-01-26 00:53:57
  • 详解Android获取设备唯一ID的几种方式

    2022-07-15 12:33:41
  • asp之家 软件编程 m.aspxhome.com