性能调优小结

       刚好项目快要上线,怎么查找系统的瓶颈?性能问题比崩溃这类问题来得复杂得多,作为以后查找问题的一个摘要,好好梳理一下。我们的系统一般都是bs系统,就以bs系统为例子。

       客户反映慢,第一反应先检查网络,以前还真遇到网络原因造成某个客户慢的情况,先找个机器连接上去,检查一下网络状况。ping一下服务器。

       接着检查一下,是否为系统的瓶颈。

       系统的瓶颈主要是cpu、内存、io等。下面以linux系统为例。

       1、首先检查是否为cpu瓶颈

       采用vmstat 1查看一下cpu和内存使用情况,注意里面的运行队列项r项,如果r项经常超过机器的cpu数,则要考虑关注是否是cpu瓶颈。si、so项经常不为0,则意味着系统大量使用swap,则要考虑内存瓶颈了。

       接着采用mpstat -P ALL,检查各个CPU的%usr、%sys使用率,看是核心态还是用户态的使用率高。是单个CPU使用率高,还是都高,如果一个CPU使用率高,而其他的CPU使用率低,则有可能这个CPU是瓶颈。

       如果初步断定为cpu瓶颈,则要找出引起瓶颈的程序,重点想办法优化,可以使用top、ps、pidstat等找出最耗cpu的进程,查找最耗cpu的线程ps Hh -eo pid,tid,pcpu | sort -nk3 | tail,可以用pstack大概分析一下进程在干什么,再进一步用perf、oprofiler工具进行采样跟踪,如果有源代码,perf将是一把性能分析的屠龙宝刀。

       2、如果内存和cpu使用不多,系统表现慢,则需要进一步考虑其他原因了,可能是竞态条件争用、io、网络等原因。像我们的服务器一般来说,上面的跑的应用就是我们的程序,可以用latencytop检查一下程序延迟的原因。


从latencytop输出可以大概分析一下主要延迟在何处。

       3、磁盘和网络方面。

       iostat 1检查一下磁盘使用程度,iostat -x检查磁盘的读写队列的长度,systemtap中的disktop.stp和iotop.stp、nettop.stp这几个东西也比较有用,可以让你很快找出耗磁盘和网络设备的最多的程序。

       netstat -s也可以检查网络的繁忙状态、网络丢包统计等。磁盘的优化手段主要有顺序读写和随机读写分开不同的物理盘,读写热点分开不同物理盘,磁盘条带化等。

       4、如果是竞态条件引起系统等待,或者系统上下文切换过多。在一般的应用系统上,很多是因为连接数据处理不过来导致,如果能知道程序现在在做什么,对分析就很有帮助了,此时strace、gdb、perf就很有帮助了,如果是java,也可以采用java dump,像jstack、jmap等重点是找出引起系统忙和等待的代码,这需要经验和具体分析了。java的profiler也是个很好的选择。

       系统调优,不同的子系统有不同的工具分析,懂得越多,分析问题的思路越广,问题定位就越准确。下面的针对不同的子系统的不同工具。

 

        调优是一个很有技术含量的活,佩服充分利用硬件的每一点资源的技术人员,吾等用着让硬盘灯狂闪、内存狂飙的工具干活,越来越沦为码奴了。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值