有些时候会分析下程序的性能问题,仅根据个人的一些实践来说下。
java web的程序的性能 一般都是针对访问多点的地方做个时间标记,模拟压测的打印log也是比较容易发现程序的一些问题的。
下面主要介绍java应用程序的性能分析一些方法。
1:使用jdk自带的jvisualvm 在window下的cmd直接启动就可以了。xp下因为盘文件格式的问题,可能导致无法访问,需要修改一些配置的路径。
jvisualvm 打开后 首先选定你的程序 展示对应的CPU 内存信息 大体能感受下你的程序有没有问题,CPU占用多少 GC是否频繁,堆内存分配。
有些时候会看到程序的堆内存忽上忽下,幅度还比较大,这个时候需要关注下。可以再jvisualvm中选择工具下载visualvm gc的插件,安装重启jvisualvm打开就可以看到插件的效果。可以看到Eden区内存增长还是比较迅速的。可以打开profile 选择内存 注意年龄字段的值 为 1说明是刚new出来的对象 如果长时间这个对象的的年龄为1 则基本上可以确定这个对象经常再被new出来。需要找出哪些代码new出了这个对象。目前也没想到好的办法,只能靠注释主逻辑的代码来查找范围。有些时候会发现数量上去了,稍微点写法都是致命的。
2: jprofile分析程序的一些CPU消耗在哪还是很不错的,通过消耗的时间树很容易找出哪些方法消耗了CPU时间。
3:对于Linux 一般都是dump内存数据来分析 导入到Eclipse中分析下内存是否有泄漏,以及内存存放了那些数据都一目了然。
这个工具也可以像Jprofile一样能通过根节点一步一步找出调用的方法。主要是查找内存的一些问题。
4:程序运行的时候加上GC的一些参数 打印出GC的时间,消耗的时间,通过修改部分代码能增长GC的时间间隔。