1. 性能分析方法

    (1)大致分为两类:1.自底向上:通过监控硬件及操作系统性能指标(CPU、内存、磁盘、网络等硬件资源的性能指标)来分析性能问题。2.自顶向下:通过生成负载来观察被测试的系统性能,比如响应时间、吞吐量。然后从请求起点由外及里一层一层分析,从而找到性能问题所在。

    (2)单机性能分析与调优

        

       1.性能分析流程

         (1)以J2EE应用为例来进行分析。

             

                             

         (2)系统性能关注点                                       

              1.系统资源

                (1)系统资源包括CPU、内存、存储介质等。一般硬件瓶颈的表现如下:1.CPU利用率过高 2.内存吃紧 3.磁盘繁忙 4.网络流量过大

              2.操作系统

                (1)操作系统的关注点是:1.系统负载:CPU的任务队列长度(windows是processor queue length,linux是load average),计算时,要考虑CPU的个数和核数,建议CPU使用率70%以下  2.系统连接数的控制(TCP连接数)  3.缓存

              3.DB

                (1)应用系统分为OLTP、OLAP。

                     

                    当前的系统大多数是OLTP类型,要关注:1.慢查询 2.大事物 3.死锁 4.DB Time高 5.磁盘I/O等待时间 

            4.中间件

               (1)有 tomcat、Jboss、weblogic等。关注点:1.JVM:监控堆内存的使用情况,包括GC频率、线程状态等。FullGC是对堆空间全面回收,此时是停止响应用户请求的,频繁FullGC会影响响应时间。监控线程的状态可以帮助我们了解线程繁忙状态,主要关注Blocked状态的线程,此状态说明线程运行相对较慢,长时间的Blocked会引起线程阻塞(任务繁重或者响应慢),甚至造成死锁。

               (2)Thread pool:中间件在接受用户请求时为了节省建立连接、销毁连接的资源消耗,设计了线程池,一般当超过一定的使用率时可以考虑加大连接池数量。

               (3)DB connections pool(数据库连接池):为了节省程序与DB建立连接、释放连接的资源消耗,设计了数据库连接池,一般当超过一定的使用率时可以考虑加大连接池数量。

            5.APP Server(应用程序)

               (1)在应用程序这一层我们的性能问题多数表现在程序逻辑混乱,调用复杂,甚至是设计不合理。

            6.Web Server(Web服务)

                (1)这一层仅仅是页面跳转控制与结果渲染(前端)。

       (3)程序优化

       (4)配置优化

           1.JVM配置优化:合理的分配堆与非堆内存,配置合适的内存回收算法。 2.连接池 3.线程池:在tomcat的server.xml文件中进行配置 4.缓存机制:通过数据的缓存减少磁盘的读写压力,缩小存储于CPU的效率差。

       (5)数据库连接池优化

           1.连接池的配置参数:实际运用中C3P9是常见的连接池实现。 2.配置多少个连接数  3.数据库连接池监控:可使用工具监控(如probe、PL/SQL)或者命令来查询

       (6)线程优化

           1.线程池优化

           2.CPU处理能力

             (1)线程池配置多少与CPU处理能力有关。服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间)* cpu数量。 I/O开销较多的应用其CPU线程等待时间会比较长,所以线程数量可以多一些,CPU可以腾出时间处理别的线程任务,相反则线程数量少一些。一下是线程与TPS关系图:

                



         3.内存容量

           (1)每一个线程的实例都会占用一定的内存(栈空间)空间。也就是说,内存对于线程数的影响我们可以通过加大内存容量及调整JVM堆空间大小来调节。JVM内存空间每开辟一个线程时,操作系统相应地也开辟一个线程与之对应。

              


        4.系统线程数限制


     (7)DB优化

          1.大体可以从下面几个方向优化

            


 3.业务流程优化

 4.结构优化