性能调优
性能调优,主要在Throughput和Latency的权衡。throughput和latency是两个相关联的量。一般减少延时,就会降低吞吐量。提高延时,就会提高吞吐。
性能监控有基于计数器
,基于跟踪
两种方式。
- 计数器(counters)内核维护的各种统计数据,基本可以“零开销”获取。vmstate,iostate等
- 跟踪(tracing)包括tcpdump,perf等工具
- 剖析 (profiling) 包括取样和快照。语言一般也会有自己的工具
工具箱
操作系统工具
windows下用windows Sysinternals一整套的工具就好了。包括process exploer,process monitor等。都可以对操作系统的性能做很好的监控。
linux下的sar
是比较全面的性能分析工具,包括iostat,vmstat。
C)网卡调优
对于网卡,我们也是可以调优的,这对于千兆以及网网卡非常必要,在Linux下,我们可以用ifconfig查看网上的统计信息,如果我们看到overrun上有数据,我们就可能需要调整一下txqueuelen的尺寸(一般默认为1000),我们可以调大一些,如:ifconfig eth0 txqueuelen 5000。Linux下还有一个命令叫:ethtool可以用于设置网卡的缓冲区大小。在Windows下,我们可以在网卡适配器中的高级选项卡中调整相关的参数(如:Receive Buffers, Transmit Buffer等,不同的网卡有不同的参数)。把Buffer调大对于需要大数据量的网络传输非常有效。
查看操作系统负载
cpu负载 CPU的利用率还要看内核态的和用户态的,内核态的一上去了,整个系统的性能就下来了。而对于多核CPU来说,CPU 0 是相当关键的,如果CPU 0的负载高,那么会影响其它核的性能,因为CPU各核间是需要有调度的,这靠CPU0完成 io负载
java提供的工具
除了系统层面的监控数据。热点方法
,堆内存
等java相关的监控。就需要用到能对java程序分析的工具。
jprofiler
jprofiler,收费工具,不过jprofiler 9有注册码可以破解。对热点方法,内存分配等,有全面的监控。也可以远程监控,不过要在服务器启动宁外的进程。jprofiler 10可以直接通过ssh tunnel 远程监控java进程。
java visualVM(java misson control)
都是java自带的工具,可以通过建立JMX链接方便的监控远程服务器的状态。查看内存和MBAN等信息。启动的时候添加参数开启就好了-Dcom.sun.management.jmxremote=true
。
JMX链接,会需要两个端口。连上后,会随机生成宁外的端口来监听指定进程。如果服务器有防火墙,可以指定两个固定端口-Dcom.sun.management.jmxremote.port=yyyy -Dcom.sun.management.jmxremote.rmi.port=yyyy
。
java misson control和visualVM基本一样。多了java fight record,以sample的方式监控性能,本来打算作为商业功能,但jdk 11也计划免费。
HPROF
HPROF: A Heap/CPU Profiling Tool (oracle) 需要启动的时候加参数