性能调优

性能调优,主要在Throughput和Latency的权衡。throughput和latency是两个相关联的量。一般减少延时,就会降低吞吐量。提高延时,就会提高吞吐。

性能监控有基于计数器基于跟踪两种方式。

  1. 计数器(counters)内核维护的各种统计数据,基本可以“零开销”获取。vmstate,iostate等
  2. 跟踪(tracing)包括tcpdump,perf等工具
  3. 剖析 (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) 需要启动的时候加参数

Updated: