from:http://zhulongchao.com/blog/performance-trace.html

1.網速測試

安裝iperf

yum install epel-release 從epel源中安裝 yum install -y  iperf 

帶寬檢測

iperf -s 開啟服務端  iperf -c ip 

丟包問題

tcpdump進行抓包  tcpdump -i eth0 -s 3000 port 8080 -w /home/tomcat.pcap  對于抓包文件采用wireshark進行分析  丟包(TCP DUP ACK) 重傳(retransmission),超時重傳, 

2.cdn性能測試

cdn 緩存,回源問題    304請求,瀏覽器是否使用本地緩存。比較last_modified 和if_modified_since  通過實踐戳來判斷,瀏覽器緩存和cdn緩存 

3.DNS基礎

路由解析

泛域名解析

4.分布式服務鏈路追蹤

http入口產生一個traceId  分發到rpc調用,cache,db,jms調用鏈路中  google的著名論文dapper和zipkin  日志聚合,綁定鏈路日志和業務日志  采樣采集,慢請求,異常服務。  日志量大。日志異步寫入,環狀數組,日志組件自研  共享信息放在ThreadLocal中。比如traceId 

5.網卡性能問題定位

tsar -l  -i 1 --traffic 查看網卡的進出流量 

6.CPU性能問題定位

tsar -l  -i 1 --cpu  軟件問題定位,perf 采樣所有進程數據  perf record -F 99 -a -g -- sleep 30  java進程的函數map:java -cp attach-main.jar:$JAVA_HOME/lib/tools.jar net.virtualvoid.perf.AttachOnce PID  輸出函數和地址的map  輸出火焰圖 perf script | stackcollapse-perf.pl | flamegraph.pl --color=java --hash > flamegraph.svg 

7.內存性能問題定位

-堆內內存問題,

采用jmap dump內存,采用離線工具分析  jprofile、mat 

-堆外內存問題

a.google-perftools

yum install -y google-perftools graphviz  export LD_PRELOAD=/usr/lib64/libtcmalloc.so.4  export HEAPPROFILE=/home/testGperf.prof  執行程序,結束程序,生成prof  分析prof  生成svg, pdf,text pprof --svg $JAVA_HOME/bin/java testGperf.prof.0001.heap > test.svg  pprof --pdf $JAVA_HOME/bin/java testGperf.prof.0001.heap > test.pdf  pprof --text $JAVA_HOME/bin/java testGperf.prof.0001.heap > test.txt 

b.jemalloc定位(優勢,適合長時間trace)

sudo apt-get install graphviz 編譯安裝 ./configure –enable-prof –enable-stats –enable-debug –enable-fill make make install

運行配置 export MALLOC_CONF=”prof:true,prof_gdump:true,prof_prefix:/home/jedump/jez,lg_prof_interval:30,lg_prof_sample:17”

export LD_PRELOAD=/usr/local/lib/libjemalloc.so.2 運行 java -jar target/spring-boot-jemalloc-example-0.0.1-SNAPSHOT.jar

jeprof –show_bytes –svg jez.*.heap > app-profiling.svg

注明:如果在docker容器中,推薦用pprof,jemalloc只顯示函數地址,不顯示函數名

8.機器資源配額問題

/etc/security/limits.conf

  • soft nofile 65536
  • hard nofile 65536

控制該用戶文件句柄數

9.磁盤性能問題定位

tsar -l -i 1 –io