Apache CXF AtomPullServer

4
我正在尝试配置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,在访问任何服务时出现,当然服务器也不再响应。如果我删除这些行,一切正常。

有什么想法是出了什么问题吗?

2个回答

3
java.lang.OutOfMemoryError: PermGen space 错误通常发生在JVM加载的Java类元信息超过阈值时。可能存在不同的问题导致此问题(在这里讨论),但配置Atom服务器可能会触发加载不适合默认PermGen区域的其他类。
您应该尝试通过设置以下JVM选项来增加Tomcat的JVM的PermGen大小:
-XX:MaxPermSize=256m

请参考这个答案获取更多信息。


这确实解决了问题,但我想了解的是为什么你只需要记录几个日志记录就需要如此大量增加内存。 - Adrian Ber
PermGen大小与数据量无关。它用于存储类信息,即代码。增加是为了容纳由原子拉取服务器组件加载的所有所需类。 - Alexey Gavrilov

1
<property name="maxInMemorySize" value="100"/>

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


远远没有达到高水平。它可以轻松处理1000个对象。这些100个对象最多只会转换成几个(也许是几百)千字节,具体取决于消息大小。 - Adrian Ber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接