对于所有关闭/关闭选民:我知道这是许多问题的完全重复,但我尝试了很多答案,但仍面临问题,因此添加了一个新问题。
问题: 我正在使用eclipse-helios和Tomcat 6作为我的春季应用程序并获得
java.lang.OutOfMemoryError: PermGen space
无论我如何调试我的申请
我试过了 1)添加
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx1024m
-XX:MaxPermSize=1204m
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
到eclipse.ini
2)使用以下内容在setenv.sh
中创建setenv.bat
和tomcat_home/bin
set JAVA_OPTS="-Xms256m -Xmx512m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
3)在日食中手动运行垃圾收集器。我通过
启用了此选项Window -> Preferences -> General -> and select always run in background and show heap status
4)重启Tomcat一百次
5)当挫折超出限制时重新启动eclipse并有时重启我的机器。
最好的部分是我仍然得到错误
我有什么办法可以尝试吗?
编辑: 我尝试运行其他应用程序,但仍然得到相同的错误恕我直言我的应用程序太小,不会导致错误,我的应用程序在我的同事设置上正常运行。
答案 0 :(得分:25)
您的前3个选项针对2个不同的JVM。选项#1和#3修改eclipse JVM实例,这是管理IDE的JVM。选项#2修改Tomcat JVM实例。这就是为什么在启动eclipse和Tomcat时假设你的任务管理器中有两个java.exe
文件(如果是windows)(假设这些文件是唯一运行的Java应用程序)。
重要的是要了解eclipse WTP(在我的案例中是Indigo)提供的Tomcat插件不调用外部(OS相关)脚本来启动/停止Tomcat。相反,他们通过命令行(java.exe ...
)直接生成Tomcat JVM。如果要修改Tomcat实例的JVM参数,请从eclipse中开始修改相应的Run Configuration
。尝试修改那里的JVM参数,它应该工作(见截图)。
答案 1 :(得分:3)
尝试set JAVA_OPTS=-XX:NewSize=128m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -Xms512m -Xmx1536m
永久代是特殊的,因为它成立 描述用户类的元数据(不属于该类的类) Java语言)。这种元数据的示例是描述对象 类和方法,它们存储在Permanent Generation中。 具有大型代码库的应用程序可以快速填满这一部分 堆将导致java.lang.OutOfMemoryError:PermGen no 你的-Xmx有多高,以及你在机器上有多少内存。
答案 2 :(得分:0)
您使用了哪些工具来分析正在运行的应用程序?我建议使用eclipse mat,尽管jconk和visualvm可用于jdk。 你是否在一个循环中的某个地方加载了很多类? 字符串怎么样?字符串池的大小是多少? 对不起,重启tomcat,eclipse或者机器不会解决问题;您需要分析和分析您的应用程序以解决问题。进行堆转储(可以使用jmap)并进行分析。
答案 3 :(得分:0)
我会在JAVA_OPTS变量中添加-XX:PermSize = 1024m,因为错误可能来自Tomcat。 我不熟悉eclipse.ini文件。
答案 4 :(得分:0)
我不知道有关eclipse.ini
的详细信息,但我只是在启动Eclipse本身时设置标志。不影响运行/调试应用程序。就个人而言,每当我想在运行/调试应用程序时更改设置时,我只需在相应的运行/调试配置中添加JVM标志。
此外,如果你使用超过1千兆的烫发空间,我想代码中有问题。 尝试找到烫发空间消耗的来源并修复它。我不是说这很容易,但是为了使应用程序正常工作,它将是必需的。 ......除非1 giga perm空间确实是有意的,但我对它有些怀疑。
您可以寻找的是string.intern()
。如果你对每个请求/条目/任意字符串执行此操作,您将无用地填充您的perm空间,因为它将永久保留字符串的副本。
答案 5 :(得分:0)
对我来说 @foreach($data as $value)
@if($value->name 'LIKE', '%' . $value->Name . '%')
<th><a href="{{route('user.show',['id'=>$value->pi_id])}}"><span style="color: red;">{{$value->Name}}</span></a></th>
@endif
@endforeach
做了伎俩。