我在remctl上使用子流程检查输出返回如下字符串:
[{'key':'value', 'key':'value', 'Key':[{'key':'value'}]},
{'key':'value', 'key':'value', 'Key':[{'key':'value'}]}]
如何将其转换为字典的对象列表,以便Python可以像往常一样在其上循环?你知道吗
我试过ast.literal_eval()
,但得到了malformed string
的错误。我还尝试了json.loads()
并收到了Expecting property name: line 1 column 3 (char 2)
错误。你知道吗
有什么办法解决这个问题吗?你知道吗
在大约5分钟的时间里,你的应用程序除了运行主要的GC之外几乎什么都不做。每个GC大约需要3-4秒(此时JVM没有响应),紧接着是另一个GC。此外,GC消耗100%的CPU(单核?)
重要的是要注意,每个主要垃圾收集中心并没有真正收集任何垃圾,无论是在年轻人中:
在老一代:
因为JVM找不到任何可用内存,它一次又一次地运行GC,然后
然而,你的应用程序并没有崩溃。然而,在这几分钟后,它突然恢复了(为了清晰起见,分成几行):
不仅整个年轻一代被释放,老一代的数量也从1280MB下降到52MB。请仔细观察这个图表。蓝线显示了你的堆使用量,几分钟后,堆的使用量突然飙升并下降。绿线还显示了平均GC时间——从可容忍的毫秒到灾难性的秒。最后,黑色竖条代表主要GC。它们不应该比每隔一分钟(小时?)出现得更频繁,不是每隔一秒钟
这告诉我,在这短短的一段时间里,你在内存中保存了大量的数据。可能是一大堆东西。不知何故,JVM并没有崩溃,而是设法继续处理。当你的工作完成后,整个系列只是GCed
如果没有看到代码(我看到
AlarmService
挂在日志中……),很难判断,但在使用内存转储和评测等工具之前,请检查代码,尤其是从DB加载或从外部获取的无限集合(我看到Twitter了吗?)memmory中的对象大致分为两堆(从GC的角度来看):年轻一代和老一代
大多数情况下,GC会在年轻的gen对象上运行短期迭代,这些迭代通常与应用程序流并行运行(应用程序不会停止)
每隔一段时间,年轻一代堆就会被填满,GC会执行所谓的“停止世界”清理,也就是说,应用程序会完全停止,GC会清理两个堆中所有不必要的对象。显然,这个迭代比通常的短迭代需要更多的时间
你需要检查几件事:
你可以在here中查找指针,也可以使用谷歌
相关问题 更多 >
编程相关推荐