【问题标题】:Apache CXF AtomPullServerApache CXF AtomPullServer
【发布时间】:2014-07-23 19:15:33
【问题描述】:

我正在尝试配置 AtomPullServer 以查看 Apache CXF 日志。 我正在使用 Tomcat 7、Apache CXF 2.7.6、Apache Abdera 1.1.3。

根据文档,我唯一应该做的就是将其添加到 Spring 上下文配置文件中

<bean id="atomPullServer" class="org.apache.cxf.management.web.logging.atom.AtomPullServer" init-method="init">
    <property name="level" value="ERROR" />
    <property name="maxInMemorySize" value="100"/>
</bean>

<jaxrs:server id="atomServer" address="/atom">
    <jaxrs:serviceBeans>
        <ref bean="atomPullServer"/>
    </jaxrs:serviceBeans>

    <jaxrs:providers>
        <bean id="feed" class="org.apache.cxf.jaxrs.provider.atom.AtomFeedProvider" />
        <bean id="entry" class="org.apache.cxf.jaxrs.provider.atom.AtomEntryProvider" />
        <bean class="org.apache.cxf.jaxrs.ext.search.SearchContextProvider"/>
    </jaxrs:providers>
</jaxrs:server>

但是一旦我添加它,我在访问任何服务时(在控制台中)得到Exception in thread "http-bio-8080-exec-X" java.lang.OutOfMemoryError: PermGen space,当然服务器不再响应了。如果我删除这些行,一切正常。

知道可能是什么问题吗?

【问题讨论】:

    标签: java tomcat log4j cxf atom-feed


    【解决方案1】:
    <property name="maxInMemorySize" value="100"/>
    

    我认为这 100 太高了。可能您的内存太低,无法存储 100 条记录,请尝试增加内存,或者您可以减少此数字。它可能会有所帮助。

    【讨论】:

    • 远不及高。它可以轻松处理 1000 个对象。这 100 个对象最多转换为几个(可能是数百个)千字节,具体取决于消息大小。
    【解决方案2】:

    java.lang.OutOfMemoryError: PermGen space错误通常发生在JVM加载的java类元信息量超过阈值时。

    这个问题可能有不同的可能原因(讨论here),但可能只是配置原子服务器触发加载不适合默认永久区域的其他类。

    您应该尝试通过设置以下 JVM 选项来增加 Tomcat 的 JVM 的 PermGen 大小:

    -XX:MaxPermSize=256m
    

    更多信息请参考this answer

    【讨论】:

    • 这确实解决了问题,但我想了解的是,为什么你需要为几条日志记录增加如此大量的内存。
    • PermGen 大小与数据量无关。它用于存储类信息,即代码。需要增加以适应 atom pull 服务器组件加载的所有必需类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多