性能优化思路与具体问题分析过程

      性能优化方法论:1.计算机领域主要涉及到通信、计算和存储三项指标,从硬件的角度对应网卡、CPU和内存、磁盘,对应的衡量指标网络IO、CPU赫兹、存储IO;2.性能优化定位瓶颈,网络IO优化:1)网卡可以购买万兆网卡;2)采用高效的数据序列化和反序列机制;3)可以减少网络传输的数据量,借鉴大数据数据动代码动的分布式计算思路,即能本地化计算就本地化计算,否则,就想办法减少网络传输的数据量,例如,Hadoop中的mapJoin以及combiner技术、Spark中的广播变量等特性;3.压缩技术能够减少网络传输的数据量,也能减少数据存储,但是增加CPU的计算量,对于hadoop分布式集群来说,主要是IO密集型,推荐采用压缩技术;

       分布式主要解决两个问题:路由+备份;MySQL数据库集群:采用主从架构,master上面的binlog会同步到slave节点上面apply;redis集群的主备与之类似;

       计算机技术归根结底都是在解决一个key value对应关系;分而治之思想无处不在,MR思想等,其实生活中分治思想无处不在。

        GC和锁是Java两大死穴,GC可以采用对外内存方式解决;锁,可以采用数据多版本思想,例如Oracle数据库中的数据多版本。


问题分析过程:

性能优化思路与具体问题分析过程_第1张图片

多次执行jstack看看最后部分,锁着的代码

性能优化思路与具体问题分析过程_第2张图片

jstat -gcutil 28232  2000


性能优化思路与具体问题分析过程_第3张图片

这三列重点监控,一个是年老代的暂用百分百,还有Full GC的次数和耗时


在进程中加入参数,记录gc历史

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log

性能优化思路与具体问题分析过程_第4张图片

上图中->之前表示回收之前大小,之后表示回收之后大小。

一份已经存在的代码,运行时占用内存偏高,或者抛出OutOfMemoryError(OOME)
用jmap得到进程的运行时内存镜像 jmap -dump:live,format=b,file=jmap.dat ${PID},其中-dump:live表示堆中活动对象,这个限定要分析对象范围。

用jhat进行内存分析 jhat -J-Xmx4g jmap.dat,会启动后会建立一个http server,端口为7000,之后通过浏览器查看统计数据并分析问题,一般是第一个链接进去就能查询到比较多的对象。


性能优化思路与具体问题分析过程_第5张图片

上图由下图中的链接地址跳转过来

性能优化思路与具体问题分析过程_第6张图片



当top命令看到系统的sys时间较高,想了解代码的实际运行内容:查看用什么参数打开了什么文件、读取写入的内容、socket参数等等

可以用strace分析工具跟踪进程及其子进程的系统调用,即# strace -fF -p ${PID} -o strace.log,跟踪新启动进程# strace -fF -o strace.log 要运行的命令。


网卡监控netstat -ant着重参考下标注

性能优化思路与具体问题分析过程_第7张图片


其他常用命令:iostat  nload  tcpdump

tcpdump -nn -i eth0 -xX -s 0 tcp and port 2181
-nn 制定抓包时不需要反解各个IP的域名
• -i 指明要侦听的网络接口,需要注意的是如果是本机连本机的话,即便是用的不是”127.0.0.1”,也是走的lo接口
• -xX 说明需要显示包的内容,默认是不显示的
• -s 0 指定每个包内取多少字节,0表示无上限,默认是128字节

你可能感兴趣的:(运维)