- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在调查我们的一个生产系统上的 JVM 崩溃,以下内存值在下面的 hs_err_pid 日志文件片段中代表什么?
Heap
par new generation total 1258624K, used 955445K [0x00000005c0000000, 0x00000006155b0000, 0x000000066aaa0000)
eden space 1118784K, 73% used [0x00000005c0000000, 0x00000005f1e52598, 0x0000000604490000)
from space 139840K, 98% used [0x000000060cd20000, 0x00000006153db100, 0x00000006155b0000)
to space 139840K, 0% used [0x0000000604490000, 0x0000000604490000, 0x000000060cd20000)
tenured generation total 2796224K, used 1745107K [0x000000066aaa0000, 0x0000000715550000, 0x00000007c0000000)
the space 2796224K, 62% used [0x000000066aaa0000, 0x00000006d52d4d90, 0x00000006c2e0c400, 0x0000000715550000)
compacting perm gen total 482944K, used 482943K [0x00000007c0000000, 0x00000007dd7a0000, 0x0000000800000000)
the space 482944K, 99% used [0x00000007c0000000, 0x00000007dd79fff0, 0x00000007dd7a0000, 0x00000007dd7a0000)
No shared spaces configured.
我关心的是“compacted perm gen”用法:它是指最大分配的 perm gen 堆的使用百分比,还是最大堆的使用百分比,或其他什么?提供的百分比似乎是已用/总计的除法,这是总分配的 perm gen 吗?由于我们的 -XX:MaxPermSize
设置为 1GB...
是否有任何有用的资源(Oracle whitepaper 除外,它没有提到 hs_err 文件)来解释在 JVM 崩溃时转储的数据?
最佳答案
我从未找到准确描述“compacting perm gen”值的引用资料,但我们自己的调查证明报告的值是:
currently used PermGen / currently allocated PermGen
在我的问题示例中,这意味着已经为 PermGen 分配了 482944K 内存,其中 482943K 内存已在 GC 点使用 (99%)。我们的最大 PermGen 大小设置为 1048576K (1GB),因此收集过程有大量保留资源可用于重新分配。
对于那些遇到类似问题的人 - 我们最终解决了问题。在我们的案例中,它原来是一个利用了 sun.misc.Unsafe 的第三方库。类,即 notoriously "unsafe"当使用不当。
在这种情况下,一个 piece of logic for cloning objects将特定的 ClassLoader 传递给某些 sun.misc.Unsafe 操作以复制对象。在某些机器上,复制的对象经常以损坏的状态创建。当 JVM 尝试进行垃圾收集时,它最终会收集这些坏对象之一并崩溃。这总是导致我的问题中描述的错误。
关于java - "compacting perm gen"值代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15611423/
第 0 代:所以我读到当 gen 0 超过大小阈值时 gen 0 触发。但我也读到GC不是在"new"时执行的,因为"new"只是向前滑动一个地址。那么,它什么时候检查它是否超过了触发 gen 0 G
“static final”是直接分配到young gen还是old gen还是perm gen? (我想它很可能会在我想的时间内落入老一代。)如果它在 perm gen 中分配,那么当在 Perm
这是一种情况,当必须将并行性引入后端服务器时。 我愿意查询 N 个 ELB,每个查询 5 个不同的查询,并将结果发送回 Web 客户端。 后端是Tornado,根据我在docs中多次阅读的内容,在过去
我正在尝试创建列表的随机排列。我是函数式语言中随机性的新手,还没有完全掌握 monad,但我以我认为应该有效的方式使用了 Random.newStdGen 和 Random.Shuffle.shuff
经过 tornado.gen documentation有人可以帮我理解 tornado.gen.coroutine 和 tornado.gen.engine 之间的确切区别 最佳答案 正如 gen.
在 document , 如果方法也用@gen.coroutine 修饰,则不需要@web.asynchronous。像这样 @web.asynchronous @gen.coroutine def
我们在带有相量的同一个 gen~ 代码框对象中有两个地方: wander = phasor(in8/dense); ...some code later... phas = (triangle(pha
我正在从事的项目都是用 Tornado 编写的,但我包含了一些 Twisted 来处理异步 XML-RPC。我想知道您是否可以使用 Tornado 的 gen.engine 和 yield gen.T
如何查看protoc-gen-go和protoc-gen-validate的版本? protoc-gen-go --version protoc-gen-validate --version 我试过上
我们使用的是 protoc-gen-go v2(v2 是 google.golang.org/protobuf,v1 是 github.com/golang/protobuf) 当我们尝试编译 gRP
刚接触tornado,所以跟着tornado的指导练习,当我开始使用Coroutines的时候,例子是这样说的: 从 Tornado 导入生成 @gen.coroutine def fetch_cor
当您创建 Python 3 生成器并立即开始运行它时。您会收到如下错误: TypeError: can't send non-None value to a just-started generato
当我在 eclipse 中清理和构建 android 项目时,它会删除 bin 文件夹和 gen 文件夹的内容,并且不会重新创建它只是创建空文件夹 gen 和 bin 为什么会发生这种情况我搜索了很多
我想使用来自 protoc-gen-grpc-kotlin 的 protoc-gen-grpc-kotlin-1.0.0我得到了 Execution failed for task ':generat
我想使用来自 protoc-gen-grpc-kotlin 的 protoc-gen-grpc-kotlin-1.0.0我得到了 Execution failed for task ':generat
在 :constructors 映射和后续的 -init 定义中,我如何表示可变参数构造函数(假设父类(super class)有多个构造函数,其中一个是可变参数)? 最佳答案 由于可变参数本质上是对
我正在使用jwilder/nginx-proxy,以便在我的domain.tld中有一个项目,在api.domain.tld中有一个项目。我关注了this tutorial,自定义default.co
我刚刚重新格式化了我的电脑。我有 windows xp sp3 32 位。我安装java jdk安卓SDK eclipse ide 当我去创建一个新的 android 项目时,我得到了这个错误。 项目
我正在开发我的 Android 项目,删除未使用的库后,我收到 错误: myproject/gen already exists but is not a source folder. Convert
protoc-gen-doc 自定义模板规则详解 配套演示工程 此项目中所用 proto 文件位于 ./proto 目录下,来源于 官方proto示例 此项目中所列所有
我是一名优秀的程序员,十分优秀!