bash: jstack: command not found【jps、jstack、jmap、jstats 命令不生效解决】

JVM 系列文章传送门

初识 JVM(Java 虚拟机)

深入理解 JVM(Java 虚拟机)

一文搞懂 JVM 垃圾回收(JVM GC)

深入理解 JVM 垃圾回收算法

一文搞懂 JVM 垃圾收集器

JVM 调优相关参数

JVM 场景面试题【强烈推荐】

JVM 性能调优 -- 线上应用 JVM 内存的的预估设置【实战】

JVM 性能调优 -- 线上应用 JVM 内存调优【实战】

JVM 性能调优 -- 模拟触发 Minor GC【GC 日志分析】

JVM 性能调优 -- 模拟触发 Minor GC(2)【GC 日志分析】

JVM 性能调优 -- CMS 垃圾回收器 GC 日志分析【Full GC】

JVM 性能调优 -- JVM常用调优工具【jps、jstack、jmap、jstats 命令】

案例

我们在 Linux 服务器上运行 JVM 相关指令,查看 JVM 运行情况的时候,发现 jps、jstack、jmap、jstats 无法执行,报错如下:

powershell 复制代码
bash: jstack: command not found

错误的意思很明显是说没有找到 jstack 命令,但我们知道这些没命令是 JDK 自带的,怎么会没有这些命令呢?

问题原因

  • 需要到 JDK 的 bin 目录下执行。
  • 没有配置环境变量。

去 JDK bin 目录下执行

查找 JDK 安装目录,执行命令如下:

powershell 复制代码
whereis is java

执行结果如下:

powershell 复制代码
is:java: /data/svr/jdk1.8.0_251/bin/java

找到 JDK 安装目录后,我们去 JDK bin 目录再次执行 jstack 命令,执行结果如下:

powershell 复制代码
bash: jstack: command not found

还是没有找到该命令,因此大概率是没有配置环境变量。

配置环境变量

找到 /etc/profile 文件,执行如下命令:

powershell 复制代码
vim /etc/profile

在 profile 文件末尾添加如下配置:

powershell 复制代码
export JAVA_HOME=/data/svr/jdk1.8.0_251
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

执行 :wq! 保存退出。

执行如下命令刷新配置:

powershell 复制代码
source /etc/profile

每次切换用户后都需要执行上述命令,没搞懂是为什么,欢迎各位朋友解惑。

再次来到 bin 目录下执行 jstack 命令如下:

powershell 复制代码
Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

显然 jstack 命令生效了。

总结:本篇简单分享了 Linux 环境 jps、jstack、jmap、jstats 命令不生效的处理方式,希望可以帮助到有需要的小伙伴。

相关推荐
我们的五年8 分钟前
【Linux系统】进程间通信-System V消息队列
linux·运维·服务器·c++
island131418 分钟前
【Linux网络#18】:深入理解select多路转接:传统I/O复用的基石
linux·运维·数据库
喻米粒06223 小时前
RabbitMQ消息相关
java·jvm·spring boot·spring·spring cloud·sentinel·java-rabbitmq
Aphelios3805 小时前
Java全栈面试宝典:线程机制与Spring IOC容器深度解析
java·开发语言·jvm·学习·rbac
TDD_06289 小时前
【运维】Centos硬盘满导致开机时处于加载状态无法开机解决办法
linux·运维·经验分享·centos
x66ccff9 小时前
vLLM 启动 GGUF 模型踩坑记:从报错到 100% GPU 占用的原因解析
linux
William.csj10 小时前
Linux——开发板显示器显示不出来,vscode远程登录不进去,内存满了的解决办法
linux·vscode
KeithTsui10 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
森叶10 小时前
linux如何与windows进行共享文件夹开发,不用来回用git进行拉来拉去,这个对于swoole开发者来说特别重要
linux·git·swoole
liulilittle10 小时前
Linux 高级路由策略控制配置:两个不同路由子网间通信
linux·网络·智能路由器