gpt4 book ai didi

spring - Tomcat - PermGen 空间异常

转载 作者:行者123 更新时间:2023-11-28 22:43:25 26 4
gpt4 key购买 nike

我在我的应用程序中使用 Tomcat 6、springs、hibernate 和 struts。我经常在有关内存的日志中遇到此异常,并且站点挂起并停止响应。我不确定出了什么问题。任何人都可以建议必须进行哪些更改才能避免这种情况。

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable 运行严重:捕获异常(java.lang.OutOfMemoryError:PermGen 空间)执行 org.apache.jk.common.ChannelSocket$SocketConnection@2c52d3,终止线程

最佳答案

PermGen 空间是 Tomcat 用来存储类定义(只有定义,没有实例化)和已被驻留的字符串池。根据经验,PermGen 空间问题往往在开发环境中经常发生,因为 Tomcat 每次部署 WAR 或执行 jspc(当您编辑 jsp 文件时)都必须加载新类。就个人而言,我在开发测试时倾向于部署和重新部署 war,所以我知道我迟早会用完(主要是因为 Java 的 GC 周期仍然有点垃圾,所以如果你快速频繁地重新部署 war够了,空间被填满的速度比他们能管理的要快。

从理论上讲,这在生产环境中应该不是什么大问题,因为您(希望)不会每 10 分钟更改一次代码库。如果它仍然出现,那只是意味着你的代码库(和相应的库依赖项)对于默认内存分配来说太大了,你只需要搞乱堆栈和堆分配。我认为标准是这样的:

-XX:MaxPermSize=尺寸然而,我发现解决这个问题的最好方法是允许类被卸载,这样你的 PermGen 就永远不会用完:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled过去,类似的东西对我来说很神奇。有一件事,使用它们会产生显着的性能折衷,因为 permgen 扫描会为您发出的每个请求或类似的东西发出额外的 2 个请求。您需要权衡使用与权衡。

关于spring - Tomcat - PermGen 空间异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18268001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com