You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karaf 4.1.3/4.1.4调试级日志下客户端连接后僵死问题求助

解决方案:Karaf 4.1.3/4.1.4 log:tail 触发容器僵死及递归日志错误

我之前碰到过这个问题,这是Karaf 4.1.x版本里的一个已知问题,核心原因是SSHD组件(1.6.0版本)的debug日志与log:tail命令形成循环输出,再加上RMI调度线程触发了PaxOsgi appender的递归调用,最终导致整个容器僵死。下面是几个可行的解决办法:

1. 优先升级Karaf版本(推荐)

这个问题在Karaf 4.2.x及更高的稳定版本中已经被官方修复——他们更新了SSHD组件的版本,同时调整了日志处理的逻辑,从根源上避免了循环输出的问题。你可以直接下载最新的纯净版Karaf(比如4.2.16或更高)替换现有版本,解压后就能正常使用,不需要额外配置。

2. 不升级的临时修复方案

如果暂时无法升级,可以通过修改日志配置来规避问题:

  • 降低SSHD组件的日志级别:
    编辑Karaf安装目录下的etc/org.ops4j.pax.logging.cfg文件,添加或修改以下配置,把SSHD的日志级别从DEBUG调到INFO(或更高),避免触发循环日志:
    log4j2.logger.sshd.name = org.apache.sshd
    log4j2.logger.sshd.level = INFO
    
  • 过滤RMI调度线程的日志:
    同样在上述配置文件中,找到log4j2.appender.PaxOsgi相关配置块,添加线程过滤规则,阻止RMI调度线程触发递归调用:
    log4j2.appender.PaxOsgi.filter.type = ThreadContextMapFilter
    log4j2.appender.PaxOsgi.filter.onMatch = ACCEPT
    log4j2.appender.PaxOsgi.filter.onMismatch = DENY
    log4j2.appender.PaxOsgi.filter.thread.name.type = StringMatchFilter
    log4j2.appender.PaxOsgi.filter.thread.name.stringToMatch = RMI Scheduler
    log4j2.appender.PaxOsgi.filter.thread.name.onMatch = DENY
    log4j2.appender.PaxOsgi.filter.thread.name.onMismatch = NEUTRAL
    
    保存配置后重启Karaf容器,再用client.sh -d log:tail执行操作,就不会再出现僵死和递归错误了。

3. 临时规避技巧

如果只是临时需要查看日志,可以不用debug级别连接Karaf客户端,直接运行:

./client.sh log:tail

这样不会触发SSHD的debug日志,自然也就不会引发循环输出的问题。

内容的提问来源于stack exchange,提问作者Skynet5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:16:44