问题

在服务器上准备排查服务进程问题,想使用jstatjcmd这些工具,然后发现给我报了个错:

bash: jstat: command not found

这是什么鬼,程序正常跑着,难道JDK还有阉割版?
看看版本,这个很正常。

1
2
3
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

那去看看bin下面是不是把这些工具全删了:

1
echo $JAVA_HOME

结果没有 JAVA_HOME 路径,这难道又是从/usr/bin指过去的,怎么总是喜欢这么玩。

1
which java

结果,还真的是

/bin/java

那再看看这个java是指向哪里的:
执行命令

1
ll /bin/java

显示路径是:

/bin/java -> /etc/alternatives/java

那么也就是指向了 /etc/alternatives/,进去看一眼:

执行命令

1
cd /etc/alternatives/

结果,指向的是/usr/java/jdk1.8.0_291-amd64/bin/java,好吧,应该是最后一层了。

java -> /usr/java/jdk1.8.0_291-amd64/bin/java
ld -> /usr/bin/ld.bfd
libnssckbi.so.x86_64 -> /usr/lib64/pkcs11/p11-kit-trust.so

进去看一眼:

1
cd /usr/java/jdk1.8.0_291-amd64/bin/

命令基本都在这里,这里也是java的目录

appletviewer
ControlPanel -> jcontrol
extcheck
idlj
jar
jarsigner
java
javac
javadoc
javafxpackager
javah
javap
javapackager
java-rmi.cgi
javaws
jcmd
jconsole
jcontrol
jdb
jdeps
jhat
jinfo
jjs
jmap
jps
jrunscript
jsadebugd
jstack
jstat
jstatd
jvisualvm
keytool
native2ascii
orbd

总结

机器一多,各种安装方式容易导致混乱如果可以,还是让运维同学统一安装基础应用,做到基础应用统一,使用时才会方便。