您的位置:首页 > 编程语言 > Java开发

Java性能调优思路

2011-05-15 13:39 148 查看
性能调优

1 被动的性能调优 自下而上: 计算机及网络(cpu,内存,文件,I/O,网络,), 操作系统(线程,内存,I/O,网络),

应用服务器和数据库(cpu,内存,文件,I/O,网络,),应用程序

在设计,开发,测试阶段进行。

2 主动的性能调优 自上而下:应用程序,应用服务器和数据库(cpu,内存,文件,I/O,网络,),

操作系统(线程,内存,I/O,网络),计算机及网络(cpu,内存,文件,I/O,网络,)

在测试结束,时间紧迫不能修改代码时,实施,上线,升级时。

被动的性能调优步骤:

(1)计算机及网络,操作系统,

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。

1) cpu的监控: Unix/Linux 用 top , vmstat , mpstat 命令查看cpu情况,Windows 任务管理器产看,sar(系统活动报告)

2) 进程资源的监控: top, prstat

3) 内存的监控:vmstat ,free

4) 磁盘的I/O的监控: iostat

5) 网络的I/O的监控: netstat, netstat -ps tcp

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}';

"可以用工具iptraf工具查看网络流量: $ iptraf -g

"针对某个Interface的网络流量可以通过比较两个时间网络接口的RX(Rx Packets是接收数据包)和TX(Tx Packets是发送数据包)数据来获得

$ date; ifconfig eth1

$ date; ifconfig eth1

6) 系统锁的监控: plockstat

解决方法,增加硬件,修改操作系统参数

(2)Java虚拟机层次的监控 jps

1) jstat -gcutil 571 1000

jstat -gcutil 21308 250 10

2) 线程互锁的监控: socket, heap, dump, kill -3 <pid>, ps -ef|grep java

3) 内存泄漏的监控: jmap , jhat ,

jmap -heap 953,jmap -histo 1123

请尝试用后面提到 的-XX:+ShowMessageBoxOnError让Java进程在退 出前先暂停,然后手动从外部执行需要的命令
16. 事前准备• 若要让JVM在检测到crash后不立即退出, 而是提示打开调试器 – 可使用 -XX:+ShowMessageBoxOnError – 主要用于crash时的现场调试 – 通常不需要启用 – 遇到很诡异的bug时可以靠该参数获取更直接 的现场信息

解决方法: 修改参数

(3)应用服务器,数据库层次的监控

1)EJB Container

2)Web Container

3)HTTP Server

4)JDBC Connection Pool

5)JMS Connection Pool

6)ORM Connection Pool

7)高速缓存命中率问题

解决方法:调整参数

(4)应用代码的跟踪

JVMTI

NetBeans Profiler

profiler.netbeans.org

解决方法:代码分析工具,找到瓶颈,修改代码。

被动性能调优的案例分析:

1 内存泄漏问题 : jstat

2 DB连接池: jmap (Head Dump)

kill -3 pid (Java Core/Thread Dump)

3 大缓存问题

4 外部命令问题 mpstat

5 文件操作问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: