查看服务器有哪些JDK,最可靠的方法是把“当前默认版本”和“全部安装记录”分开查:先执行java -version、which java,再用包管理器、/usr/lib/jvm、update-alternatives和JAVA_HOME交叉确认。 只跑一条java -version,看到的往往是PATH里排最前的那个JDK,而不是服务器上装过的全部JDK,业内专家指出,Java多版本共存是测试、灰度、老系统维护中的常见状态,盘点清楚能避免应用启动时版本错位。
Linux服务器如何查看已安装的JDK版本
三条命令先定位当前默认JDK
登录Linux服务器后,先别急着翻目录,下面三条命令能快速判断当前默认JDK:
java -version:查看运行时版本,输出会显示OpenJDK、Java(TM) SE Runtime等字样。javac -version:查看编译器版本,如果提示command not found,可能只装了JRE,没有完整JDK。which java和readlink -f $(which java):找到java命令的真实路径,很多发行版的/usr/bin/java是软链接,先指向/etc/alternatives/java,再指向/usr/lib/jvm/.../bin/java。
java -version javac -version which java readlink -f $(which java)
如果java -version和javac -version结果不一致,说明PATH里java和javac可能来自不同JDK,编译和运行版本错位,后续排查会很麻烦。
再盘点全部JDK安装目录和安装记录
当前默认JDK不等于全部JDK,下面这些命令用来查“还装过什么”:
ls -la /usr/lib/jvm:绝大多数Linux发行版把JDK放在这里。ls -la /usr/java、/opt、/usr/local:商业JDK或手动解压的JDK常在这些目录。find / -maxdepth 4 -type f -name javac 2>/dev/null:按javac可执行文件反查安装位置。rpm -qa | grep -i jdk:适用于CentOS、RHEL、Rocky Linux等。dpkg -l | grep -i jdk:适用于Ubuntu、Debian等。update-alternatives --list java:列出通过alternatives管理的所有java。update-alternatives --list javac:列出所有javac。
| 检查命令 | 作用 | 适用场景 |
|---|---|---|
java -version |
看当前默认运行时 | 快速确认应用实际使用版本 |
readlink -f $(which java) |
看软链接最终指向 | 排查PATH与JAVA_HOME不一致 |
ls /usr/lib/jvm |
看已安装JDK目录 | 发行版包安装、多版本共存 |
rpm/dpkg查询 |
看包管理记录 | 确认是否通过系统包安装 |
update-alternatives --list |
看alternatives候选 | Debian、Ubuntu、部分RHEL系 |
环境变量和启动脚本里也藏着JDK
有些服务器不通过系统包安装JDK,而是手动解压后写进环境变量,这时要查:
echo $JAVA_HOME:当前会话的JAVA_HOME。cat /etc/profile:全局环境变量。cat ~/.bashrc、cat ~/.bash_profile:当前用户环境变量。grep -R "JAVA_HOME" /etc/profile.d/ 2>/dev/null:很多云服务器把环境变量放在这里。systemctl cat 服务名:查看systemd服务是否单独指定了JDK路径。- Tomcat、Jenkins、Nexus等应用还要看
setenv.sh、catalina.sh或启动参数。
Windows服务器查看JDK安装路径和版本
命令行与PowerShell快速检查
Windows服务器上,先打开CMD或PowerShell:
java -version:查看默认Java版本。where java:列出PATH中所有java.exe,这是发现多版本的关键。echo %JAVA_HOME%:查看JAVA_HOME是否配置。Get-ChildItem 'C:Program FilesJava':查看常见安装目录。reg query "HKLMSOFTWAREJavaSoftJava Development Kit" /s:查64位注册表记录。reg query "HKLMSOFTWAREWOW6432NodeJavaSoftJava Development Kit" /s:查32位注册表记录。
如果where java返回多个路径,比如同时出现C:Program FilesJavajdk-8bin和C:Program FilesJavajdk-17bin,说明服务器上很可能装了多个JDK,哪个在PATH前面,哪个就会被默认调用。
图形界面与注册表交叉确认
不习惯命令行的运维人员,可以走图形界面:
- 控制面板的“程序和功能”里查看已安装的Java开发工具包。
- 系统属性里的“环境变量”查看JAVA_HOME和Path顺序。
- 注册表
HKLMSOFTWAREJavaSoftJava Development Kit下会列出已注册JDK版本。 - 计划任务、Windows服务、IIS应用池可能单独配置Java路径,需要逐个确认。
Windows上尤其要注意服务账户,你在当前CMD里看到的是JDK 17,不代表Windows服务启动时也用JDK 17,服务属性里的启动参数、环境变量覆盖,都可能让它调用另一个JDK。
服务器上存在多个JDK怎么切换默认版本
行业共识认为,切换JDK不是改一个地方就结束,PATH、JAVA_HOME、应用服务配置要同步。
Linux下用update-alternatives切换
Debian、Ubuntu以及部分RHEL系服务器,可以用:
sudo update-alternatives --config java sudo update-alternatives --config javac
按提示选择编号后,再验证:
java -version javac -version readlink -f $(which java)
接着把JAVA_HOME改到目标JDK根目录,
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk export PATH=$JAVA_HOME/bin:$PATH
要永久生效,写进/etc/profile.d/java.sh或对应用户的.bashrc。java和javac最好来自同一个JDK,否则编译时用一个版本,运行时用另一个版本,问题很难查。
Windows下调整Path与JAVA_HOME
Windows切换JDK通常有两种方式:
- 修改系统环境变量
JAVA_HOME,指向目标JDK目录。 - 调整Path中
%JAVA_HOME%bin的位置,确保它排在旧JDK路径前面。 - 用
setx JAVA_HOME "C:Program FilesJavajdk-17"写入用户或系统变量。 - 修改后关闭并重新打开CMD、PowerShell,必要时重启依赖Java的Windows服务。
如果服务器上运行Jenkins、Tomcat、Nexus,还要检查它们自己的启动脚本,全局环境变量改了,服务脚本里写死的路径没改,应用仍然会用旧JDK。
云服务器与北京地域节点查看JDK要额外付费吗
云服务器查看JDK版本命令和物理服务器基本一致,通过SSH登录后,执行java -version、which java、ls /usr/lib/jvm即可,北京、上海、广州等地域节点不会改变查看方法,差别只在网络延迟和计费策略。
查看JDK本身不需要额外付费,云服务器费用通常按实例规格、带宽、磁盘计费,和是否执行java -version无关,SDKMAN、jenv等版本管理工具也是免费开源的,真正要避免的是从不明来源下载所谓“一键JDK检测工具”,生产服务器上运行来路不明的脚本风险很高。
容器场景下,命令稍有不同:
docker exec -it 容器名 java -version:查看容器内默认JDK。docker exec -it 容器名 sh -c 'ls /usr/lib/jvm':查看容器内JDK目录。docker inspect 容器名 | grep -i java:查看容器环境变量中是否传入JAVA_HOME。
免费工具还是命令行?云服务器查看JDK成本对比
命令行方案
命令行最直接,零安装,适合生产服务器,组合使用java -version、where java或which java、readlink -f、包管理器查询,基本能覆盖多数场景,它不产生费用,也不引入额外依赖。
多版本管理工具
jenv、SDKMAN、Jabba等工具适合开发机或测试机,它们能列出、安装、切换多个JDK,免费且开源,生产服务器上要谨慎,工具本身会修改PATH和shell配置,可能和现有运维脚本冲突。
云厂商控制台
云厂商控制台通常只能看实例状态、监控和镜像信息,不能直接列出服务器内装了哪些JDK,要确认JDK,仍然要登录实例执行命令,云服务器查看JDK版本命令并不复杂,核心还是java -version、which java和安装目录检查。
关于查看服务器有哪些JDK的常见问题
为什么java -version只显示一个JDK?
java -version调用的是PATH中第一个java,服务器上即使装了多个JDK,默认只会显示当前生效的那个,要查全部JDK,需要看/usr/lib/jvm、update-alternatives --list java、包管理器记录和where java。
JAVA_HOME和java -version不一致怎么排查?
先用readlink -f $(which java)确认实际执行的java路径,再对比echo $JAVA_HOME,如果PATH里JDK的bin目录排在前面,java -version会优先使用PATH版本;而部分应用只认JAVA_HOME,让PATH和JAVA_HOME指向同一个JDK,能减少版本冲突。
服务器只有java没有javac,还算装了JDK吗?
只有java通常意味着只装了JRE或运行时环境,JDK包含JRE和开发工具,javac是判断完整JDK的直观标志,要确认是否安装JDK,可以检查javac -version、/usr/lib/jvm目录以及rpm -qa | grep -i jdk或dpkg -l | grep -i jdk记录。
盘点服务器JDK,先看当前默认,再查安装目录、包管理记录和环境变量,把java -version、readlink -f $(which java)、update-alternatives --list java、rpm或dpkg查询组合起来,基本不会漏掉多版本共存;切换后同步检查javac,才能让编译和运行保持一致。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/684350.html





