我有一个网络应用程序,它根据用户请求将 java bean 序列化为 xml 或 json。
当我对其施加一点负载时,我遇到了一个令人费解的问题,它很快就用完了所有分配的内存,并达到了最大容量。然后我观察到完整的 GC 每 20-40 秒就非常努力地工作。
看起来不像是内存泄漏问题...但我不太确定如何解决这个问题?
序列化为 xml/json 的 bean 具有对其他 bean 的引用以及对其他 bean 的引用。我使用 json-lib 和 jaxb 来序列化 bean。
yourkit 内存分析器告诉我 char[] 是最消耗内存的 Activity 对象...
感谢任何见解。
最佳答案
有两种可能性:您有内存泄漏,或者您的 web 应用程序只是生成大量垃圾。
判断您是否有内存泄漏的蛮力方法是长时间运行它,看看它是否因 OOME 而失败。或者打开 GC 日志记录,看看垃圾回收后剩余的平均空间是否随着时间的推移持续上升。
无论是否存在内存泄漏,您都可以通过增加最大堆大小来提高性能(减少 GC 时间百分比)。你的 webapp 看到很多完整的 GC 的事实向我表明它需要更多的堆。 (如果您有内存泄漏,这只是一个创可贴解决方案。)
如果事实证明您没有遭受内存泄漏,那么您应该看看为什么您的应用程序会产生如此多的垃圾。这可能取决于您执行 XML 和 JSON 序列化的方式。
关于java - 频繁的垃圾收集java web应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561412/