首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在生成核心转储时,Jstack和gcore之间的区别?

在生成核心转储时,Jstack和gcore之间的区别?
EN

Stack Overflow用户
提问于 2017-07-31 17:32:10
回答 1查看 452关注 0票数 1

我们都知道核心转储是分析Unix中各种进程的基本诊断工具。我知道jstack和gcore都用于生成Javacore文件或核心转储,但我怀疑Gcore主要用于进程,而Jstack主要用于线程。

从操作系统的角度来看,进程和线程虽然是相互关联的(进程只由线程组成),但它们在内存/速度/执行方面是相对不同的。那么gcore将诊断进程而jstack将分析该进程中的线程吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 22:32:54

GCore在操作系统级别执行操作,您会得到当前正在运行的本机代码的转储。从java的角度来看,这并不是真正可以理解的。

JStack为您提供应用程序拥有的所有线程在VM级( java堆栈)的堆栈跟踪。您可以从中发现在某一时刻执行的真正java代码。

显然,GCore几乎从未使用过(级别太低,原生代码...)。只有本地库或类似的东西的问题才真正奇怪,可能需要这种工具。

还有一个jmap可以生成一个hprof文件,它是来自你的虚拟机的堆数据。像'Memory Analyser Tool‘这样的工具可以打开hprof,你可以深入了解(在内存端)发生了什么。如果您的VM由于OutOfMemory而崩溃,您还可以设置参数来获取事件发生时的hprof。它有助于理解原因(太多用户,获取太多数据的数据库查询...)

最后一件事是,您可以在启动VM时添加调试选项,以便您可以连接到它,并在运行的进程上进行调试。如果您有一些无法在本地环境中重现的奇怪问题,它会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45412158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档