zoukankan      html  css  js  c++  java
  • 性能优化

    性能测试主要看哪几方面?

    1. 响应时间 : 完成一个业务所需要的时间

    2. 吞吐量: 单位时间处理的业务数量

    3. 资源利用率 : 完成业务需要的开销 ( CPU, 内存,IO)

    性能的难点

    用户总希望发最小的代价取得最大的收益,实际上一旦确定了架构,性能也就确定了

      - 如果遵守规范体系能够达到默认架构的性能

      - 大多数的开发会违背架构,拖后腿

    性能测试模型

    1. 做单用户的业务串行测试 : 评估单独业务的相应时间

    2. 多用户的并发测试:了解相应时间的转折点: 

      - 队列

      - 资源不足

      - 处理能力的峰值

    模型结论:(所有系统都遵守)

    1. 响应时间随着负载的上升先稳定后上升,并且越来越快

    A点:响应时间开始变长的点

    为什么响应时间开始变长? 当到达A点说明负载导致了队列的产生

    B点: TPS开始下降

    B点处理能力已经不能完全占用资源,开始下降了

    C点: 响应时间超过用户接受范围

    C点响应时间超时

    系统在A点,说明负载小

    系统在B点,说明达到系统最佳在线用户

    系统在C点,说明系统不能用 

    正常系统应该一直在A->B之间,最好不超过B

    性能瓶颈:99%都是数据库

    调优:ABC三点右移,说明调优成功


    系统如果慢了,应该怎么处理?

    有监控系统就看监控系统,没有监控系统就用命令,查看CPU, 内存,IO,network的信息

    命令: top 

    1. 查看cpu的使用情况

    查看cpu详细情况,比如有几核

    cat /proc/cpuinfo

    top命令下按一下1,cpu有几核等信息也会出来

    那么看到了cpu占用率比较高的进程,应该怎么定位代码呢?

        在top下用shift+h,把进程的线程信息显示出来, jstack 线程PID > info.txt,把线程pid转换为16进制,搜索info.txt,就可以看到信息了

    jstack命令:每个线程的信息都会显示出来

    2. 内存

    vmstat 或top 

    vmstat

    vmstat 1 : 1秒中显示一次

    free -g : 单位是G

    free -m: 单位是m

    buffer: 写优化

    cache: 读优化

    用top命令看,如果mem占比高的话,就要考虑是不是JVM的问题了

    3. IO : 磁盘读写

    iostat

    %util : 查看IO占cpu时间比,可能超过5%就有问题了

    怎么定位到IO问题? 只能看业务逻辑了

    4. Network

    nicstat

    用jmeter压测某个url,就可以看到网络的使用情况

    监控系统:

    1. 硬件的监控

    2. 服务的监控

     

  • 相关阅读:
    [LeetCode] Minimum Depth of Binary Tree
    [LeetCode] Symmetric Tree
    [Leetcode] Same Tree
    [LeetCode] Binary Tree Preorder/Inorder/Postorder Traversal
    [LeetCode] Copy List with Random Pointe
    [LeetCode] Largest Rectangle in Histogram
    [LeetCode] Longest Valid Parentheses
    SQL Server 2005 数据库复制(转载)
    Nginx 大文件上传解决方案(500M以上)
    百度WebUploader 大文件上传解决方案(500M以上)
  • 原文地址:https://www.cnblogs.com/yintingting/p/11320424.html
Copyright © 2011-2022 走看看