skywalking 在 linux 上能运行但默认配置必失败:需修改 127.0.0.1 为宿主机真实 ip、调整端口避免冲突、正确配置 es/mysql 存储参数、确保 agent 路径绝对且无空格、严格同步时间(≤15 秒)并匹配 jdk 版本要求。

直接说结论:SkyWalking 在 Linux 上能跑起来,但默认配置基本必挂——127.0.0.1 写死、端口冲突、存储未配、时区/时间不同步,这四点不处理,startup.sh 启动后 oap-server 很快会静默退出,UI 打不开也查不到日志。
改掉所有 127.0.0.1 和端口冲突项
默认 config/application.yml 里 collector.backend_service、receiver.trace.default 等都绑 127.0.0.1,远程 Java 应用根本连不上。必须统一改成宿主机实际可访问的 IP(比如 192.168.1.100),不能是 localhost 或 0.0.0.0。
UI 默认端口 8080 极易和 Tomcat、Nginx 冲突,务必改到冷门端口:
- 修改
webapp/webapp.yml中的server.port,例如设为18080 - 同时在
config/application.yml中确认core.default下的restHost和restPort与之匹配 - 检查
bin/startup.sh是否硬编码了端口,有就一并改掉
选对存储并配通连接参数
SkyWalking 9+ 默认用 Elasticsearch,但很多用户卡在 cluster_name 或 cluster_nodes 配错上。常见错误现象:oap-server 日志反复报 NoNodeAvailableException 或 Connection refused。
关键配置项(以 ES 7.x 为例):
-
storage: elasticsearch: cluster_name必须和 ES 配置中cluster.name完全一致(区分大小写) -
cluster_nodes填http://127.0.0.1:9200,不是9300(那是 transport port,OAP 不用它) - 确保 ES 已启用
http.cors.enabled: true,否则 UI 请求会被浏览器拦截 - 若用 MySQL,要手动把
mysql-connector-java-x.x.x.jar放进oap-libs/目录
Java 应用接入时 -javaagent 的路径和参数陷阱
Agent 路径写错是最常见的启动失败原因,尤其 Docker 化后容易漏掉容器内路径映射。
正确做法:
- 确保
skywalking-agent.jar文件真实存在,且权限可读(ls -l /path/to/agent/skywalking-agent.jar) - 启动命令中
-javaagent:后面**不能有空格**,也不能用相对路径(如./agent/...),必须是绝对路径 - 在
agent/config/agent.config中,collector.backend_service必须填 OAP 实际监听的地址+端口(如192.168.1.100:11800),不是 UI 地址 - 如果应用跑在容器里,
collector.backend_service要填宿主机 IP,不是host.docker.internal(该域名在 Linux Docker Desktop 外不可用)
时间同步和 JVM 版本这两个隐形杀手
OAP 和被监控 Java 应用的系统时间差超过 15 秒,会导致 trace 数据被丢弃,UI 查不到任何链路——这个错误不会报在日志里,只会静默过滤。
JVM 版本不兼容也会导致 agent 加载失败:
- OAP Server 要求 JDK 11+(SkyWalking 9.4+ 强制要求 JDK 17)
- 被监控的 Java 应用最低支持 JDK 8,但 JDK 17+ 更稳;JDK 21 需确认 SkyWalking 版本是否已适配(截至 2026 年 5 月,9.4.0 尚未完全支持 JDK 21 的虚拟线程)
- 用
java -version分别检查 OAP 和应用所在环境的 JDK 版本,不要只看$JAVA_HOME
真正麻烦的是时间同步——NTP 服务没开、时区设错、Docker 容器没挂载宿主机时间文件,这三个点任何一个出问题,链路就断得莫名其妙。别跳过这一步。











