Apache Sling 配置参数详解

详解 Apache Sling 9 的配置参数:启动命令行参数、sling.properties 框架属性、HTTP 端口、运行模式、存储目录、日志与 JVM 堆,逐项给出实测生效结果与生产配置模板,参数含义与默认值均来自真实环境验证

Apache SlingApache Sling2026/10/12

Apache Sling 配置参数详解

目标:系统梳理 Apache Sling 9(launchpad standalone jar 运行形态)的配置体系——启动命令行参数、sling home 中的 sling.properties 框架属性、HTTP 端口、运行模式、存储目录、日志与 JVM 参数,每项参数给出实测默认值与修改后的生效结果。全部回显在 Ubuntu 22.04.5 真实环境验证。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • Java:OpenJDK 1.8.0_504(openjdk-8-jre-headless + openjdk-8-jdk-headless,后者提供 jps)
  • Apache Sling:9(org.apache.sling.launchpad-9.jar)
  • 安装目录:/opt/sling-lp9
  • sling home:/opt/sling-lp9/sling
  • 默认端口:8080;默认运行模式:oak_tar
  • 管理账号:admin,口令 q1w2e3r4(由默认口令 admin 修改而来)

二、前置条件

  • 已按《Apache Sling 安装指南》完成方案 A 安装,服务可正常访问(curl http://localhost:8080/ 返回 302)。
  • 已安装 openjdk-8-jdk-headless(提供 jps)、iproute2(提供 ss)、procps(提供 ps)。
  • 理解修改原则:命令行参数 → 启动命令追加;框架属性 → 编辑 sling home 的 sling.properties;两者均需重启进程生效。

三、参数查看与修改方式

方式查看方法修改方法生效条件
启动命令行参数`ps -efgrep [j]ava` 查看进程参数启动命令追加(如 -p 8888、-Dsling.run.modes=author)
sling.properties直接查看 /opt/sling-lp9/sling/sling.properties编辑该文件(键值格式)重启进程
运行时状态Web Console 状态接口(curl 查询 JSON)/system/console 控制台页面即时
JVM 参数jps -v启动命令/systemd 单元中改 JAVA 参数重启进程

运行时状态查询(真实回显):

# curl -s -u admin:q1w2e3r4 "http://localhost:8080/system/console/status-slingsettings.json" | head -c 600
[
    "Apache Sling Settings",
    "Sling ID = d1f2c3a5-5402-4132-aa87-616e157b768e",
    "Sling Name = Instance d1f2c3a5-5402-4132-aa87-616e157b768e",
    "Sling Description = Instance with id d1f2c3a5-5402-4132-aa87-616e157b768e and run modes [oak_tar]",
    "Sling Home = /opt/sling-lp9/sling",
    "Sling Home URL = file:/opt/sling-lp9/sling/",
    "Run Modes = [oak_tar]"]

该接口可直接读出当前生效的 Sling ID、sling home 与运行模式,是核对配置是否生效的首选途径。

四、参数总览

参数层级默认值作用
-p <port>启动命令行8080指定 HTTP 监听端口
-Dsling.run.modes=<modes>启动命令行oak_tar追加运行模式
org.osgi.service.http.portsling.properties8080HTTP 端口(框架属性层)
org.osgi.framework.storagesling.propertiessling home 下 felix 子目录OSGi bundle 缓存目录
felix.cm.dirsling.propertiessling home 下 config 子目录configadmin 配置存储目录
sling.installer.dirsling.propertiessling home 下 installer 子目录OSGi 安装器资源目录
repository.homesling.propertiessling home 下 repository 子目录Oak 仓储根目录
localIndexDirsling.propertiessling home 下 repository/indexLucene 本地索引目录
org.apache.sling.commons.log.filesling.propertiessling home 下 logs/error.log主日志文件
org.apache.sling.commons.log.levelsling.propertiesINFO日志级别
org.apache.sling.commons.log.file.sizesling.properties'.'yyyy-MM-dd日志滚动策略(按天)
org.apache.sling.commons.log.file.numbersling.properties5保留的历史日志个数
org.osgi.framework.startlevel.beginningsling.properties30框架起始 Start Level
felix.startlevel.bundlesling.properties20bundle 默认 Start Level
-Xms / -XmxJVM 参数默认堆本文统一 256m / 512m

💡 sling.properties 首次启动自动生成,文件头注释为 #Overlay properties for configuration(实测 14,452 字节),即「覆盖层属性」:启动时先取内置默认,再用该文件覆盖,最后应用命令行系统属性。

五、核心参数分类详解

5.1 启动命令行参数

-p <port>:HTTP 监听端口。 实测 8888:

# cd /opt/sling-lp9 && nohup java -jar org.apache.sling.launchpad-9.jar -p 8888 > boot-p8888.log 2>&1 &
# grep -E "HTTP server port|Startup completed" boot-p8888.log
12.10.2026 05:16:41.008 *INFO * [main] HTTP server port: 8888
12.10.2026 05:16:44.699 *INFO * [main] Startup completed
# ss -tlnp | grep -E "8888|8080"
LISTEN 0      50                 *:8888            *:*    users:(("java",pid=4772,fd=185))
# curl -s -o /dev/null -w "curl_8888=%{http_code}\n" -u admin:q1w2e3r4 http://localhost:8888/index.html
curl_8888=200

结论:-p 优先级高于 sling.properties 中的端口值,适合临时换端口。

-Dsling.run.modes=<modes>:追加运行模式。 实测 author:

# cd /opt/sling-lp9 && nohup java -Dsling.run.modes=author -jar org.apache.sling.launchpad-9.jar > boot-rm.log 2>&1 &
# curl -s -u admin:q1w2e3r4 "http://localhost:8080/system/console/status-slingsettings.json" | grep "Run Modes"
    "Run Modes = [oak_tar, author]"]

结论:该参数把 author 追加到默认 oak_tar 之后(不是替换),可用于按模式装配 bundle 与配置。

JVM 参数: 统一 -Xms256m -Xmx512m(详见 5.6 节)。

5.2 HTTP 端口参数(org.osgi.service.http.port)

sling.properties 中默认第 16 行为 org.osgi.service.http.port=8080。实测改为 8081(不带 -p 启动):

# sed -i "s/^org.osgi.service.http.port=8080/org.osgi.service.http.port=8081/" /opt/sling-lp9/sling/sling.properties
# grep -n "^org.osgi.service.http.port" /opt/sling-lp9/sling/sling.properties
16:org.osgi.service.http.port=8081
# cd /opt/sling-lp9 && nohup java -jar org.apache.sling.launchpad-9.jar > boot-sp.log 2>&1 &
# grep -E "HTTP server port|Startup completed" boot-sp.log
12.10.2026 05:18:10.172 *INFO * [main] HTTP server port: 8081
12.10.2026 05:18:13.855 *INFO * [main] Startup completed
# ss -tlnp | grep -E "808[01]"
LISTEN 0      50                 *:8081            *:*    users:(("java",pid=5360,fd=18))

结论:不带 -p 时端口完全由该键决定;持久改端口优先改此文件(命令行 -p 只对当次启动有效)。恢复默认执行反向 sed 改回 8080 即可。

5.3 运行模式参数

键/参数默认值说明
(当前生效模式)oak_tarstatus-slingsettings.json 的 Run Modes 实测输出
sling.run.mode.install.optionsoak_tar,oak_mongosling.properties 中声明可选的存储运行模式(oak_tar 为文件段存储,oak_mongo 为 MongoDB 存储)
-Dsling.run.modes=author无命令行追加模式,实测结果 [oak_tar, author]

💡 运行模式决定哪些按模式注册的 bundle 与配置参与装配。launchpad 内置 oak_tar 单机存储,绝大多数单机部署保持默认即可。

5.4 存储与目录参数

sling.properties 中以下键以 sling home 变量引用组织,解析后的实际位置如下(以本文 sling home 为 /opt/sling-lp9/sling 为例):

键解析后实际路径目录实测内容
org.osgi.framework.storage/opt/sling-lp9/sling/felixbundle0、bundle1 等编号缓存文件(157 项)
felix.cm.dir/opt/sling-lp9/sling/configconfigadmin 配置文件、DynamicBindings.config
sling.installer.dir/opt/sling-lp9/sling/installerRegisteredResourceList.ser(85,852 字节资源清单)
repository.home/opt/sling-lp9/sling/repositoryindex、segmentstore(Oak 数据落盘处)
localIndexDir/opt/sling-lp9/sling/repository/indexLucene 索引文件

⚠️ 迁移或备份实例时,以上目录整体随 sling home 拷贝即可;单独改这些键会把对应数据迁到新路径,改动前必须先停进程并搬移旧数据。

5.5 日志参数

键默认值说明
org.apache.sling.commons.log.filesling home 下 logs/error.log主日志(实测 12.10.2026 05:25:50.088 *INFO* [async-index-update-async] org.apache.jackrabbit.oak... 格式)
org.apache.sling.commons.log.levelINFO级别可选 ERROR/WARN/INFO/DEBUG
org.apache.sling.commons.log.file.size'.'yyyy-MM-dd按天滚动
org.apache.sling.commons.log.file.number5保留历史份数

除主日志外,logs/ 下还有 request.log 与 access.log 两份请求日志(格式实测):

# tail -2 /opt/sling-lp9/sling/logs/request.log
12/Oct/2026:05:25:53 +0000 [3] -> GET /content/mynode.json HTTP/1.1
12/Oct/2026:05:25:53 +0000 [3] <- 404 text/html 8ms

# tail -2 /opt/sling-lp9/sling/logs/access.log
127.0.0.1 - admin 12/Oct/2026:05:25:53 +0000 "DELETE /content/mynode HTTP/1.1" 204 - "-" "curl/7.81.0"
127.0.0.1 - admin 12/Oct/2026:05:25:53 +0000 "GET /content/mynode.json HTTP/1.1" 404 2537 "-" "curl/7.81.0"

排障时建议:改 level 为 DEBUG 仅临时使用,否则日志量增长明显。

5.6 JVM 参数(堆内存 256-512MB)

启动命令或 systemd 单元中固定:

java -Xms256m -Xmx512m -jar /opt/sling-lp9/org.apache.sling.launchpad-9.jar

生效核验(jps 由 openjdk-8-jdk-headless 提供):

# jps -v | grep -i sling
5757 org.apache.sling.launchpad-9.jar -Xms256m -Xmx512m
# ps -ef | grep "[j]ava" | head -1
root        5757       1  0 05:19 ?        00:00:25 /usr/bin/java -Xms256m -Xmx512m -jar /opt/sling-lp9/org.apache.sling.launchpad-9.jar

实测该实例稳定运行常驻内存约 414MB(systemctl status sling 的 Memory 值),512MB 堆上限满足单机验证与中小流量场景。

5.7 框架与 Start Level 参数

键默认值说明
org.osgi.framework.startlevel.beginning30框架启动到达的 Start Level
felix.startlevel.bundle20bundle 安装后的默认 Start Level
org.osgi.framework.bootdelegation含扩展委托包列表允许 bundle 委托给 JVM 类加载器的包前缀(含 sling.bootdelegation.sun=sun.*,com.sun.* 等)
obr.repository.urlhttp://sling.apache.org/obr/repository.xmlOSGi Bundle Repository 地址(离线环境可忽略)

💡 Start Level 参数一般保持默认;只有做裁剪部署(延迟加载部分 bundle)时才需要调整。

六、生产配置模板

适用场景:8GB 内存、SSD 磁盘、单机中小型内容服务(日请求 10 万级以内)。

systemd 单元(/etc/systemd/system/sling.service):

[Unit]
Description=Apache Sling Launchpad 9
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/sling-lp9
ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/sling-lp9/org.apache.sling.launchpad-9.jar
Restart=on-failure
RestartSec=5
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

sling.properties 生产建议键值(编辑后重启生效):

org.osgi.service.http.port=8080
org.apache.sling.commons.log.level=INFO
org.apache.sling.commons.log.file.size='.'yyyy-MM-dd
org.apache.sling.commons.log.file.number=10

💡 依据:512MB 堆实测常驻约 414MB,1GB 以上内存服务器即可承载;日志保留 10 份按天滚动约覆盖两周排障窗口;存储、索引目录保持 sling home 默认布局便于整目录备份。

七、常见问题(FAQ)

Q1:改了 sling.properties 不生效?

原因:该文件仅在进程启动时读取。解决:重启 Sling 进程(systemd 场景 systemctl restart sling),再经 status-slingsettings.json 或日志核对新值。

Q2:-p 与 sling.properties 的端口哪个生效?

实测:命令行 -p 优先生效(-p 8888 时 sling.properties 仍写 8080,监听为 8888)。两者都改且不一致时,以 -p 为准,排查时先看启动命令再查文件。

Q3:-Dsling.run.modes=author 后原有 oak_tar 模式丢失?

实测不丢失:结果为 [oak_tar, author],命令行模式是追加而非替换;若需完全自定义集合,检查 sling.properties 中 sling.run.mode.install.options 与启动参数的组合。

Q4:日志文件涨到数 GB?

定位:level 为 DEBUG 或未配置滚动。解决:log.level 调回 INFO,确认 file.size 为按天滚动、file.number 控制份数(默认 5 份)。

Q5:sling.properties 被删了会怎样?

下次启动会重新生成默认内容(文件头注释 #Overlay properties for configuration),但其中的手工定制会丢失,建议定制后随 sling home 一并纳入备份。

八、参考链接