当项目出现用户无法登录或者执行某个操作时,卡顿现象,查看日志会发现大量java.lang.OutOfMemoryError: GC overhead limit exceeded错误。原因分析:此错误表示垃圾收集器长时间运行,而Java程序的进度非常缓慢。在垃圾收集后,如果Java进程花费了大约98%的时间进行垃圾收集,且回收的内存不到总内存早谨的2%,并且连续的垃圾收集操作已进行至少5次,就会抛出java.lang.OutOfMemoryError。这通常是因为内存中的存活数据量几乎填满了Java堆,几乎没有足够的空间供新对象分配。解决方案:首先,增加堆内存大小可以解决此问题。可通过命令行参数-XX:-UseGCOverheadLimit关闭此异常。其次,增加堆内存大小。若问题仍然存在,获取堆内存快照,使用Eclipse MAT工具,找出陆拿基内存泄漏的根源并修复。优化代码,减少内存使用或重用对象,减少垃圾收集器的运行次数。对于在循环中创建大量临时对象的情况,尝试重用它们。升级JDK到1.8或更高版本,使用G1GC垃圾回收算法。在启动脚本中设置:-xms1g -xmx2g配置堆内存大小。最后,解决内存泄漏问题,代码中存在大量占用内存的对象,导致无法被GC回敏闹收,久而久之出现内存不足,无法为新对象分配空间。总结:GC overhead limit exceeded问题本质上是代码问题,与内存分配无关。通过代码分析找出内存泄漏的根源并进行修复,可以有效解决此问题。