性能调优
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 文件操作问题