温馨提示×

Ubuntu Java虚拟机配置指南

小樊
39
2025-12-26 03:45:47
栏目: 云计算

Ubuntu Java虚拟机配置指南

一 安装与版本选择

  • 更新索引并安装 OpenJDK(推荐 LTS 版本 11 或 17):
    • 安装 OpenJDK 11:sudo apt update && sudo apt install openjdk-11-jdk -y
    • 安装 OpenJDK 17:sudo apt update && sudo apt install openjdk-17-jdk -y
    • 快速默认安装:sudo apt install default-jdk -y
  • 如需 Oracle JDK,可从官网下载 .tar.gz,解压至 /usr/local/(示例:/usr/local/jdk-11),再配置环境变量。
  • 验证安装:
    • java -version
    • javac -version
  • 多版本并存与切换:
    • 查看/切换默认 Java:sudo update-alternatives --config java
    • 如需,也配置 javacsudo update-alternatives --config javac
  • 常见安装路径参考:
    • OpenJDK 包安装:/usr/lib/jvm/java-11-openjdk-amd64
    • 手动解压安装:/usr/local/jdk-11

二 环境变量与系统配置

  • 用户级配置(仅当前用户生效,推荐):编辑 ~/.bashrc
    • 添加:
      • export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
      • export PATH=$JAVA_HOME/bin:$PATH
    • 使生效:source ~/.bashrc
  • 系统级配置(所有用户生效):编辑 /etc/profile
    • 在文件末尾添加同上两行,执行:source /etc/profile
  • 注意:
    • 路径需与实际安装路径一致(可用 update-alternatives --config java 查看实际路径)。
    • 若使用手动解压版,请将 JAVA_HOME 指向解压目录(如 /usr/local/jdk-11

三 JVM内存参数与常用调优

  • 常用参数(启动时传入或在环境变量中设置):
    • -Xms:初始堆大小(如 -Xms512m
    • -Xmx:最大堆大小(如 -Xmx2g;生产环境建议与 -Xms 等值以减少堆扩展抖动)
    • -Xmn:年轻代大小(不熟悉建议保留默认)
    • -Xss:每个线程栈大小(不熟悉建议保留默认)
    • 示例:java -Xms512m -Xmx2g -jar MyApp.jar
  • 查看与验证内存设置:
    • 查看最大堆:java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
    • 应用内查看(字节,需换算):
      • Runtime.getRuntime().maxMemory() / 1024 / 1024 ≈ MB
      • Runtime.getRuntime().totalMemory() / 1024 / 1024
      • Runtime.getRuntime().freeMemory() / 1024 / 1024
  • 持久代与元空间说明:
    • Java 8 及更早:使用 -XX:PermSize / -XX:MaxPermSize
    • Java 8 之后:使用 Metaspace(无 PermSize,相关参数不同)
  • 服务/容器化场景常用环境变量(示例):
    • JAVA_OPTS=“-Xms512m -Xmx2g”(通用)
    • Tomcat:CATALINA_OPTS=“-Xms512m -Xmx2g”
  • 监控与诊断:
    • 命令行:jstat -gc 1000
    • 图形化:jconsole / VisualVM

四 常见问题与排查

  • 命令未找到(java/javac):
    • 检查 JAVA_HOMEPATH 是否正确,执行 source ~/.bashrcsource /etc/profile 后重试。
  • 多版本冲突:
    • 使用 sudo update-alternatives --config java(必要时也配置 javac)统一默认版本。
  • 权限问题:
    • 安装或移动目录时使用 sudo;必要时修正目录属主:sudo chown -R $USER:$USER /usr/lib/jvm/java-11-openjdk-amd64
  • 内存溢出(OutOfMemoryError):
    • 先增大堆:-Xms-Xmx(如 -Xmx4g),观察是否缓解。
    • 分析内存使用:jstatVisualVMEclipse MAT 等定位泄漏或不必要对象。
    • 如涉及 Direct Memory,考虑 -XX:MaxDirectMemorySize
    • 必要时尝试更优的 JVM 实现(如 OpenJ9GraalVM)或升级 JDK 版本。

0