在开发,测试环境,我们可以通过JConsole或者VisualVM去监控Java程序的运行时,但是生产环境是不会给你安装这些应用的。JDK1.6之后,JMX管理默认都是开启的,所以你也可以通过JMX管理达到监控和调优的目的。这也是我下一阶段的工作一部分。
大体的需求包括:
- 显示虚拟机进程以及进程的配置,环境信息(jps,jinfo)
- 监视应用程序的CPU,GC,堆,方法区以及线程信息(jstat,jstack)
- dump以及分析堆转储快照(jmap,jhat)
- 方法级的程序运行分析,找出被调用最多的,运行时间最长的方法
- 离线程序快照:收集程序的运行时配置,线程dump,内存dump等信息建立一个快照,可以将离线发给开发者进行BUG反馈
下面介绍JVM优化案例
高性能硬件上的程序部署策略
背景:日PV量15万左右的在线文档类型网站,硬件升级前使用32位系统1.5GB的堆,用户刚到网站比较缓慢,不会停顿。
现状:最近更换硬件,新的硬件为4个CPU,16GB物理内存,操作系统64位的JDK1.5,Resin作为Web服务器。设置-Xmx和-Xms参数将Java堆固定在12GB。
问题:使用一段时间后并不理想,网站经常出现不定期长时间失去响应的情况。
原因:监控服务器运行情况发现网站失去响应是由GC停顿导致的