剖析定位系统问题,性能优化指南
2018-08-10 09:16
423 查看
关于系统性能优化涉及的内容非常多,我会分几篇文章来分享,这次分享下定位系统层面问题的常用方法。
系统性能定义
- Throughout 吞吐量 (系统每秒钟可以处理的请求数)
- Latency 延迟 (系统处理一个请求的延迟)
- Usage 资源利用率
- 吞吐量越高,延迟会越大。因为请求量过大,系统太繁忙,所以响应时间会降低。
- 延迟越小,能支持的吞吐量会越高。因为延迟短说明处理速度快,就可以处理更多的请求。
- 异步化可以提高系统的吞吐量的灵活性,但是不会获得更快的响应时间。
- 应用层面
- 系统层面
- JVM层面
- Profiler
- QPS
- 响应时间,95、99线等。
- 成功率
- 安装方法
- 功能说明
- 使用率:Cpu是最重要的资源,如果CPU在等待,也会导致Cpu高使用率。
- 用户时间/内核时间:大致判断应用是计算密集型还是IO密集型。
- 负载load:在特定时间间隔内运行队列中的平均进程数。每个CPU都有一个运行队列,队列里存放着已经就绪,等待被CPU执行的线程。理想状态下,希望负载平均值小于等于Cpu核数。
- 负载均值用来估量CPU利用率的发展趋势,而不是某一时刻的状况。
- 负载均值包括所有CPU的需求,而不仅仅是在测量时活跃的。
- R (TASK_RUNNING),可执行状态。
- S (TASK_INTERRUPTIBLE),可中断的睡眠状态。
- D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。
- T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态。
- Z (TASK_DEAD – EXIT_ZOMBIE),退出状态,进程成为僵尸进程。
- X (TASK_DEAD – EXIT_DEAD),退出状态,进程即将被销毁。
- 正常的连接应该是ESTABLISHED状态,如果存在大量的SYN_SENT的连接,则需要看下防火墙规则。
- 如果Recv-Q或者Send-Q持续有大量包存在,意味着连接存在瓶颈或者程序存在bug。
- 将找出的线程id转换为16进制
- jstack获取java的线程堆栈
- 根据16进制的id从线程堆栈中找到相关的堆栈信息
- 执行的Native method是重新创建的线程。
- 代码bug,堆内存耗完,jvm不断执行full gc。
- jvm自身bug😂。
相关文章推荐
- 剖析定位系统问题,性能优化指南
- 系统性能定位和优化方法
- WEB系统性能问题的分析定位方法
- SQL性能优化之定位网络性能问题的方法(DEMO)
- 从某次测试过程中,得到的MySQL性能优化的建议,和定位问题的方法 推荐
- Gearman分布式任务处理系统(七)问题研究与性能优化
- SQL性能优化之定位网络性能问题的方法(DEMO)
- 系统性能优化要具体问题具体分析
- SQL性能优化:如何定位网络性能问题
- MySQL优化之—— 定位性能问题
- Linux系统性能问题定位-网络带宽瓶颈
- mysql性能优化问题定位-待解决
- Android性能优化5 多线程并发的性能问题所幸的是,Android系统为我们提供了Looper、Handler、MessageQueue来帮助实现上面的线程任务模型: Looper: 能够确保线
- Gearman分布式任务处理系统(七)问题研究与性能优化
- Linux系统性能问题定位-内存泄露
- 【转载】WEB系统性能问题的分析定位方法
- ios 性能优化之定位应用程序的内存问题
- 十、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL
- 订单系统新增订单接口负载测试性能问题及定位
- Windows日志定位系统性能问题