- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个在一个 tomcat 实例上运行的 Java webapp。在高峰时段,Web 应用程序每秒提供大约 30 个页面,通常约为 15 个页面。
我的环境是:
O/S: SUSE Linux Enterprise Server 10 (x86_64)
RAM: 16GB
server: Tomcat 6.0.20
JVM: Java HotSpot(TM) 64-Bit Server VM 1.6.0_14
JVM options:
CATALINA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m
-XX:+UseParallelGC
-Djava.awt.headless=true
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_OPTS="-server"
正常运行几天后,Full GC 开始更频繁地发生,这成为应用程序可用性的严重问题。在 tomcat 重新启动后,问题消失了,但当然会在 5 到 10 天或 30 天后返回(不一致)。
重启前后的 Full GC 日志位于 http://pastebin.com/raw.php?i=4NtkNXmi
它显示了在 6.6 天正常运行时间重新启动之前的日志,其中应用程序受到影响,因为 Full GC 需要 2.5 秒并且每 ~6 秒发生一次。
然后它会在重启后显示一个日志,其中 Full GC 仅每 5-10 分钟发生一次。
当 Full GC 发生时,我使用 jmap -dump:format=b,file=dump.hprof PID
得到了两个转储(我不确定我是否完全正确地得到了它们Full GC 正在发生或在 2 个 Full GC 之间)并在 http://www.eclipse.org/mat/ 中打开它们但在 Leak Suspects 中没有得到任何有用的信息:
请注意,我从未收到 OutOfMemoryError。
关于我下一步应该看哪里有什么想法吗?
最佳答案
当我们遇到这个问题时,我们最终将其追溯到年轻一代太小。尽管我们给了很多 ram,但年轻一代并没有得到应有的份额。
这意味着小型垃圾回收会更频繁地发生,并导致一些年轻的对象被移动到老年代,这也意味着更多的大型垃圾回收。
尝试使用具有相当低值(例如 2 或 3)的 -XX:NewRatio
,看看是否有帮助。
可以找到更多信息 here .
关于java - Full GC变得非常频繁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916723/
我有一个包含值的字符串数组(duh...)。 有没有一种简单的方法可以获取出现次数最多的条目?有点像 values[37].getMostOften(); 干杯:) 最佳答案 您可以使用GroupBy
我目前正在将一款用 C#(适用于 Windows Phone)开发的游戏移植到 Java (Android)。 我们在 Java 版本中遇到了内存问题,在分析之后,似乎是由于内存中的大量 String
对于播放音频文件的 iPhone 应用程序,我正在开发一个系统来跟踪用户在他们听过的任何一集中的进度(例如,他们听 file1 的前 4:35,然后开始另一个文件,然后返回到文件 1,它从 4:35
如果您按下 UIbutton 显示 UITextView,将请求代码 Ì 再次按下 UIbutton 再次显示 UITextView :/ 最佳答案 .h 文件中只有一个 int 变量,如下所示..
我在 Application_End 上处理的项目中使用临时数据库: protected void Application_End() { if (_db != null) _db.Dispo
我是一名优秀的程序员,十分优秀!