当前位置: 首页 > 知识库问答 >
问题:

使tomcat从metaspace卸载已编译的JSP文件

夏振国
2023-03-14

与java.lang.OutofMemoryError(PermGen space)和java.lang.ClassNotFoundException在jsp页面的开头类似,但有一些更现代的问题。

我有一个遗留应用程序,其中有很多JSP。其中一些使用 · · …来创建空格(因为页面上的CSS清理还没有完成)。

最近,在系统运行一段时间后,我们已经摆脱了内存错误。我正在评估堆空间,它似乎在控制之下,强制周期性GCs显示它小于100MBS的堆,但非堆大小正在增加。我已经将大小限制为300MBS,这似乎已经很大了,因为系统在Docker中通常运行在512MB。

无论如何,我使用JSPC,当我将所有生成的类文件占用的字节数加在一起时,我得到了21,981,012个字节。根据我看到的其他答案,我认为它进入了metaspace。当然,当它被解压缩到内存中时,这个数字可能会增加很大一部分。

所以我的问题是,是否有一种方法可以配置Java或Tomcat,以便在不使用metaspace时从它释放类数据,并在需要时重新加载它?

更新:我在catalina_opts中显式地限制了metaspace的大小,以便它更快地失败-xx:maxmetaspacesize=200m-xx:compressedclassspacesize=100m

共有1个答案

谷良弼
2023-03-14

默认情况下,JVM处理类的加载和卸载。您的应用程序命令行是什么?您看到的是OOM:Metaspace还是JavaHeap?

 类似资料:
  • 每次我在TomCat上运行我的web应用程序时,它都会给我一个错误。这辆车没什么问题。jsp文件,只是我必须重新启动服务器,有时还要重新启动完整的IDE,才能消除这个错误。 错误如下 2014年3月12日下午5:57:01组织。阿帕奇。卡塔琳娜。果心StandardWrapperValve:Servlet。路径为[/Assignment_1_Flight_Reservation_System]的上

  • 我使用的是最新的TomCat版本,我最近安装了Eclipse Java EE版本,所以它也是最新的版本。顺便说一句,我有最新版本的Java SE(JDK)。 这是我的课: 这是我真正简单的jsp代码: 我得到了这个错误: 类型异常报告 消息无法为JSP编译类: 说明服务器遇到意外情况,无法完成请求。 异常org.apache.jasper.jasperException:无法为JSP编译类: 在生

  • 我是Maven构建工具的初学者。为了了解maven,我从eclipse中的原型创建了一个简单的j2ee 1.4 Web应用程序项目。 之后,我在pom.xml中添加了maven tomcat插件。然后我让maven来构建、测试和打包项目。之后,我设定了运行tomcat插件的目标。tomcat插件成功运行,并向我显示了应用部署的链接http://localhost:8080/FirstMavenAp

  • 我有一个项目,其中包含页面文件夹中的单个页面以及一些javascript库和代码。我将它们捆绑到WAR中并将其部署在CentOS系统中。但是当我尝试访问它时,我得到了错误。错误交替出现在 和 我在本地机器中部署它没有问题。 编辑:配置 这是CentOS中tomcat的配置,我的本地机配置相同,除了

  • •JSP(它所做的只是显示一个字符串) •JSP位置:tomcat/webapps/hello/hello.jsp ·Java类(它所做的只是返回一个字符串) 包HelloWorld; 是什么引起的? 谢谢,

  • 我运行了一个简单的程序,它允许我将HTTP请求映射到一个函数——这很棒,所以我决定,与其简单地返回一个随机字符串,我还可以轻松地返回一个字符串格式的超文本标记语言页面,就像能够动态地提供静态超文本标记语言页面一样。 问题是我无法加载网页资源。 我的项目具有以下结构: 正如我所说,如果我只是想返回一个字符串,我的程序工作正常,它正在尝试加载我似乎无法管理的home.html文件,特别是我的问题是如何