关于性能调优

Linux系统调优

调优步骤

衡量系统现状:包括系统的请求次数,响应时间,资源消耗等

设定调优目标:

寻找性能瓶颈:

资源消耗主要集中在CPU文件IO网络IO内存

CPU消耗分析:

CPU主要用于中断,内核,用户进程的处理

上下文切换,运行队列,利用率的概念

对于java应用,CPU消耗严重通常体现在us用户进程和sy内核上

us:

us高表示应用消耗了大量CPU,Java应用造成us高的原因一是线程一直处于可运行的状态,没有任何挂起动作,二是频繁的GC

sy:

sy高表示线程一直在切换,Java应用造成sy高的原因一是线程太多,切一直处于阻塞和执行的状态,二是锁竞争激烈,三是有较多网络IO操作

文件IO消耗分析:

原因主要是多个线程同时写入大量数据到同一文件中,造成文件很快变大,写入速度变慢,同时各个线程争抢文件锁

网络IO消耗分析:

原因主要是同时需要发送或接收的packet太多

内存消耗分析:使用pidstat和top命令共同分析堆外内存的消耗情况,使用jvm分析工具堆内存消耗情况。

对jvm堆内存外的物理内存的消耗:分析DerectByteBuffer类的使用情况

对jvm堆内存的消耗:使用可视化工具分析具体对象的内存占用。

 

资源消耗不多,但程序执行慢

1、锁竞争激烈

2、没有发挥硬件性能

3、数据量增长

 

调优

JVM调优

1、代大小调优

调节参数-Xms -Xmx -Xmn -XX:SurvivorRatio -XX:MaxTenuringThreshold

①-Xms -Xmx通常设置相同值

②避免新生代过大过小

新生代过大导致老年代过小,fullGC发生概率增加,还会导致minorGC耗时大幅提高;

新生代过小导致minorGC更加频繁,还会导致对象更容易进入老年代,导致fullGC

③避免survivor区过大过小:默认811

survivor区过大导致eden区过小,fullGC更加频繁

survivor区过小导致minorGC之后对象更容易进入老年代。

④合理设置存活周期:默认15次

2、GC策略调优

参考垃圾收集器的选择

程序调优(代码调优)

1、CPU消耗严重

us高:第一种原因的常见方法是对线程添加Thread.sleep(),释放CPU执行权;第二种原因是jvm调优

sy高:第一种原因是减少线程数量;第二种原因是降低锁的竞争;第三种原因是采用协程来支持高并发

2、文件IO消耗严重

①异步写文件

②批量读写

③限流

④限制文件大小

3、网络IO消耗严重

限流,限制packet发送频率

4、内存消耗严重

①释放不必要的引用

②使用对象缓存池

③采用合理的缓存失效算法,控制缓存池中对象的数目

④合理使用软引用和弱引用

 

锁竞争激烈

1、使用并发包中的类或接口

2、使用Treiber算法

3、使用Machael-Scott非阻塞队列算法

4、尽可能少用锁

5、使用拆分锁。读锁和写锁

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值