jjzjj

Java HotSpot 1.6 VM,垃圾收集——可怕的 PermGen

coder 2024-03-21 原文

我的应用程序显示“Old Generation”/“Tenured Generation”大小不断增加,当这达到“Old Gen”的最大限制时,PermGen 大小突然增加。 这是我的代数:

-Xmx1200m -Xms1200m -Xmn450m -XX:MaxPermSize=600m -XX:+UseParallelGC

这是在 32 位 Fedora 上,所以不能有比这更大的堆。

虽然该应用程序使用了 Spring IOC 和 Hibernate,但它没有进行任何花哨的类加载,Spring App-context.xml 定义了大约 1000 个 Bean。

此应用从 175MB 的 PermGen 开始,在几个小时内稳步增加到约 250MB,一直保持这种状态直到 Tenured Generation 达到约 780 MB,然后 permgen 跳到约 500MB,而 Old Gen 下降到约 500MB。

这迫使我每天重新启动应用程序,并让我真正害怕迫在眉睫的 OutOfMemory 错误。任何见解都会非常有帮助。

谢谢 Gala101

5 月 13 日:有人可以解释一下当“老一代”被垃圾回收时会发生什么吗?
jvm 是否将“Old Gen”中的集合放入 PermGen 中?
我的 PermGen 尖峰仅在从“Old Gen”收集时才会出现,OldGen 大小的减少也与 PermGen 大小的增加密切相关。
PS:我不做任何实时部署/取消部署,因为那肯定会耗尽 PermGen。
下面是我的监控页面的当前截图:(提交的部分刚刚从 ~250 MB 跳到 500 MB)

    PS Perm Gen
Type    Non-heap memory
Usage   init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Peak Usage  init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Collection Usage    init = 16777216(16384K) used = 252421536(246505K) committed = 504954880(493120K) max = 629145600(614400K)

最佳答案

我会听从 leonm 的建议来分析是什么占用了这么多内存。我敢打赌你有某种严重的内存泄漏。

你说你不做任何花哨的类加载,但 Hibernate 会为你动态生成一些类。 您是否使用了一些 AOP 功能(例如来自 Spring AOP 模块?)。

基本上,如果您的 PermGen 空间用完了,那么您的应用程序似乎会继续生成新类(因为它是存储在 PermGen 中的类)。

关于Java HotSpot 1.6 VM,垃圾收集——可怕的 PermGen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2809715/

有关Java HotSpot 1.6 VM,垃圾收集——可怕的 PermGen的更多相关文章

  1. ruby - 在 Ruby 数组中收集重复项的最快/单行方法? - 2

    像这样转换数组的最快/单行方法是什么:[1,1,1,1,2,2,3,5,5,5,8,13,21,21,21]...进入像这样的对象数组:[{1=>4},{2=>2},{3=>1},{5=>3},{8=>1},{13=>1},{21=>3}] 最佳答案 要获得所需的格式,您可以附加一个调用以映射到您的解决方案:array.inject({}){|h,v|h[v]||=0;h[v]+=1;h}.map{|k,v|{k=>v}}虽然它仍然是单行的,但它开始变得凌乱了。 关于ruby-在Ruby

  2. ruby-on-rails - 为什么 Devise/Omniauth 会向 URL 添加垃圾? - 2

    使用facebook登录后,我被重定向到/#_=_,其中显示主页。这种垃圾也出现在其他URL中,例如当注册失败并被重定向到/users/sign_in#_=_为什么会发生这种情况,我该如何解决? 最佳答案 如果你真的不想要它,一些简单的javascript就可以了:if(window.location.hash=="#_=_"){window.location.hash="";} 关于ruby-on-rails-为什么Devise/Omniauth会向URL添加垃圾?,我们在StackO

  3. ruby-on-rails - ActionMailer HTML 编码 hell - 特殊字符替换为垃圾 - 2

    我有UTF-8字符串:Website•Facebook那是中间的一颗子弹又名•或0xE20x800xA2此值已正确存储在数据库中,并使用默认设置使用Rails3和ruby​​1.9.3正确显示在屏幕上。我正在尝试通过HTML电子邮件发送此邮件,但是当一切都说完之后,接收端看到的是垃圾:这背后的代码很简单,我有一个ActionMailer子类(默认使用UTF-8)设置以在布局中发送带有UTF-8内容编码的HTML电子邮件:email.html.erb布局文件:"all"%>内容使用与呈现网页相同的View,重要的一行是:我已经尝试了很多很多force_encoding的排列,e

  4. ruby - MailCatcher 不适用于 VM 上的 rbenv - 2

    我在使用rbenv管理的VM(VirtualBox)中安装了MailCatcher。但是,mailcatcher不起作用,在下面显示错误消息:`require':cannotloadsuchfile--i18n/core_ext/string/interpolate(LoadError)i18n好像没装,我装了[vagrant@localhost~]$gemlisti18n***LOCALGEMS***i18n(0.7.0.beta1)我同样安装在AWSEC2中,它可以工作。我的VM中发生了什么?---详情---操作系统:CentOS6.5Ruby:2.1.1和rbenv0.4.0完整

  5. ruby - 符号的垃圾收集 Ruby 2.2.1 - 2

    所以从Ruby2.2+版本开始引入了符号垃圾回收。我在irb中编写了以下代码片段:before=Symbol.all_symbols.size#=>3331100_000.timesdo|i|"sym#{i}".to_symendSymbol.all_symbols.size#=>18835GC.startSymbol.all_symbols.size#=>3331因此,正如预期的那样,它收集了使用to_sym动态生成的所有符号。那么GC是如何知道收集哪些符号的呢?即使它们在程序中被引用,它会收集符号吗?符号垃圾回收是如何工作的?如果我创建的其中一个符号在程序中被引用,它还会收集它吗?

  6. ruby-on-rails - 收集 Rails 应用程序使用统计信息的最佳方式 - 2

    我有一个Rails应用程序,用户可以在其中设置他们的域并在其中发布内容。我需要收集公共(public)流量统计信息,例如网页浏览量等。此功能的一个很好的例子是我作为客户可以看到的flickr使用统计信息。问题是收集使用信息的最佳方式是什么。应该通过解析日志文件来完成还是应该在运行时收集并存储在数据库中?是否有任何工具或Rails插件已经提供了此功能?此解决方案应该可以很好地扩展,即使每月有数千个域和数百万次网页浏览。 最佳答案 GoogleAnalytics可能是您最好的选择... 关于

  7. ruby - ActiveRecords 选择(:id). 收集与采摘(:id) methods: Why is pure AR "pluck" slower? - 2

    我正在尝试从我的文章模型中获取所有ID。我可以通过两种方式做到这一点:Article.select(:id).collect{|a|a.id}ArticleLoad(2.6ms)SELECT"articles"."id"FROM"articles"或2.2.1:006>Article.pluck(:id)(4.3ms)SELECT"articles"."id"FROM"articles"什么给了?为什么AR比Ruby版本慢?即使我对Ruby方法进行基准测试,它似乎也更快:Benchmark.measure{Article.select(:id).collect{|a|a.id}}Art

  8. ruby - ruby中类实例变量的垃圾回收 - 2

    如果我使用类似的方法defself.get_service_clientreturn@service_clientif!@service_client.nil?@service_client=#initializelogicend现在@service_client是一个类的实例变量。它在内存中有多长时间?只要类在内存中(即像静态变量一样),我可以指望它不会被重新初始化吗? 最佳答案 类也是Ruby中的实例,但是当您以通常的方式定义类时,它会被分配给一个常量,并且该常量会被其他常量引用,从而阻止其被收集。因此,该类将无限期地存储在内存

  9. 信息收集(Web目录扫描) - 2

    一、扫描原因        (1)寻找到网站后台管理        (2)寻找未授权界面        (3)寻找网站更多隐藏信息        (4)通过使用目录扫描可以让我们发现这个网站存在多少个目录,多少个页面,探索出网站的整体结构。通过目录扫描我们还能扫描敏感文件,后台文件,数据库文件,和信息泄漏文件等等。二、方法1、robots.txt        (1)Robots协议(RobotsExclusionProtocol)“网络爬虫排除标准”,网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。        (2)同时也记录网站所具有基本的目录。        

  10. ruby - 附加具有唯一值的收集数组 - 2

    所以我有一个由collect构建的数组。@a=Relation.where(part:"v04")@relations=@a.collect{|x|x.car}构建..=>["f03","f04"]@a=Relation.where(part:"v03")@relations=@a.collect{|x|x.car}构建..=>["f01","f03"]我想要的是追加收集,这样我就可以从v03和v04构建一个数组,它看起来像这样。=>["f03","f04","f01","f03"]然后只保留唯一值,所以它看起来像这样。=>["f03","f04","f01"]取出f03,因为它列出了

随机推荐