Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 生成核心转储时Jstack和gcore之间的差异?_Unix_Process_Operating System_Java Threads - Fatal编程技术网

Unix 生成核心转储时Jstack和gcore之间的差异?

Unix 生成核心转储时Jstack和gcore之间的差异?,unix,process,operating-system,java-threads,Unix,Process,Operating System,Java Threads,我们都知道,内核转储是分析Unix中各种进程的基本诊断工具。我知道jstack和gcore都用于生成Javacore文件或核心转储,但我怀疑gcore主要用于进程,而jstack用于线程 从操作系统的角度来看,进程和线程虽然相互关联(进程仅由线程组成),但它们彼此相对不同—内存/速度/执行。因此,gcore将诊断该进程,jstack将分析该进程中的线程???gcore在操作系统级别执行操作,您得到了当前正在运行的本地代码转储。从java的角度来看,这是不可理解的 JStack在VM级别(java

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


从操作系统的角度来看,进程和线程虽然相互关联(进程仅由线程组成),但它们彼此相对不同—内存/速度/执行。因此,gcore将诊断该进程,jstack将分析该进程中的线程???

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

JStack在VM级别(java堆栈)获取应用程序所有线程的堆栈跟踪。您可以从中找到在某一点上执行的真正java代码

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

还有jmap可以生成hprof文件,该文件是来自VM的堆数据。像“”这样的工具可以打开hprof,您可以深入了解发生了什么(在内存端)。 如果您的VM由于OutOfMemory而崩溃,您还可以设置参数以在事件发生时获取hprof。这有助于理解原因(用户太多,数据库查询获取太多数据…)


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

从上面的内容可以看出,gcore对于核心转储非常有用,而Jstack用于线程转储。在链接中可以找到两者之间的差异。