问题来自Java技术沙龙的陈帅
Java技术沙龙报名链接:https://yq.aliyun.com/promotion/796
问题发生后,第一时间是快速保留问题现场供后面排查定位,然后尽快恢复服务。保留现场的具体操作:
打印堆栈信息,命令行:jstack -l 'java进程PID'
打印内存镜像,命令行:jmap -dump:format=b,file=hprof 'java进程PID'
生成core文件,命令行:gcore 'java进程PID'
保留gc日志文件
保留业务日志文件
查看JAVA堆内存运行分配:命令行:jstat -gcutil 'java进程PID' 1000
完成以上操作后,尽快重启JAVA进程或回滚,恢复服务。
当应用系统运行缓慢,页面加载时间变长,后台长时间无影响时,都可以参考以下归类的解决方法。绝大部分的JAVA程序运行时异常都是Full GC、OOM(java.lang.OutOfMemoryError)、线程过多。主要分这么几大类:
持续发生Full GC,但是系统不抛出OOM错误
堆内存溢出:java.lang.OutOfMemoryError:Java heap space
线程过多:java.lang.OutOfMemoryError:unable to create new native thread
JAVA进程退出
CPU占用过高
通常来说,可以用一些常用的命令行来打印堆栈、内存使用分配、打印内存镜像文件来分析,比如jstack、jstat、jmap等。但是某些时刻,还是需要引入更高阶的代码级分析工具(比如btrace)才能定位到具体原因。针对每一种问题,我会依据具体的case来详细说明解决方式。
JVM优化有参考经验方法,因为每个公司系统不同,JVM版本不同,优化的方式也不一样。
1、首先,在调优JVM之前分析代码。找到问题点,对症下药,解决问题
2、其次,仔细阅读JVM文档; 理解JVM参数的意义。 例如,-server标志仅在JVM保持驻留并运行一段时间时才有用; -server“关闭”JIT / HotSpot,并且需要通过相同的路径进行多次传递才能启动。 另一方面,-server减慢了JVM的初始执行速度,因为设置时间更长。
3、JVM优化的网站和书籍参考资料 http://www.javaperformancetuning.com/
4、借助 VisualGC或者VisualVM,或者JMAP,JStack等工具辅助进行JVM优化。监控内存使用情况,堆栈情况,对象,是否内存泄露等,然后再采取具体措施有针对性的解决问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。