性能测试监控与诊断
我们依据一个HTTP请求处理的过程,采用主流的J2EE技术栈,如下图所示
1>用户的请求通过网卡传送到服务器(中断信号),用户与服务器简历TCP/IP链接。也就是产说的TCP三次握手。既然是链接,就有限制,有限制就会有性能风险。在此我们可以监控网络IO的流量,网络中断,网络连接数来分析网络状况。
2>用户请求发送到监听端口(中间件的端口),中间件帮我们实现了通信及端口监听功能。就像我们去热门餐馆吃饭,排队是常态,此时通常会有有一名接待人员帮我们发号。如果用户请求过多,中间件是不是也需要一个类似的机制帮助维护请求队列?
没错,中间件有这个功能,甚至像餐厅的接待人员不止一名,也可以是多名。在此我们可以监控请求的连接数,当前链接的状态来分析繁忙程度,导致链接跟踪数据来分析线程的处理过程。
3>中间件把请求构造成HttpServletRequest对象。程序员开发的程序HttpServletRequest来识别用户的请求。例如用户要保存数据,在此可以监控到请求的整个处理时间。
4>程序处理完请求返回一个HttpServletRequest对象,然后中间件处理剩余的工作,把处理完的结果回传给用户。如果程序处理的比较慢,请求资源不断进来,TCP/IP连接数会被塞满,先请求的用户等待响应,后请求的用户根本连不上,这种情况如何处理呢?
连接池,异步IO就产生了。在此可以监控连接数及线程状态。
5>如果请求的数据内存中没有,优先从缓存中获取。我们知道磁盘读写是物理操作,大量读写自然效率不高。因此我们监控到大量的IO,特别是磁盘的IO时,通常都会有优化的可能。在此可以监控磁盘的IO,内存的使用状态,分析构成IO的程序,从而找到问题的所在。
6>如果请求的数据需要从数据库中获取,又恰好数据库在另外一台服务器上,程序会请求数据库连接,连接当然是需要经过网卡的,这就又面临一个连接数据的限制问题了。在此可以监控数据连接的数据量,状态,帮助分析数据库的繁忙程度。
7>数据库的数据查询与存储就涉及数据库的读取与存储机制,我们需要监控诊断数据库;就是我们常说的SQL执行计划分析,缓存分析,IO分析;SQL优化,结构优化。
不管是中间件或者是程序,都是要消耗CPU资源的。CPU从内存中获取数据进行运算,内存是有限的,内存资源的紧缺会导致CPU等待,内存资源紧张又可能是内存被占用过多或者内存无法收回。
如果CPU要获取的数据不在内存中,就会从磁盘中读取,磁盘读取相对内存读取在时间上是有很大差距的,CPU会产生IO等待。
由此可见CPU,内存,IO(磁盘IO及网络IO)是相互影响的。有时候某一个资源的瓶颈也许是另外一个资源的瓶颈导致的。木桶的理论告诉我们,一个团队的能力是有短板决定的,牵一发而动全身。
我们通过监控关键性指标来定位程序问题,发挥计算机的长处,弥补或绕过短处来提高系统性能。
阅读后若有收获,不吝关注,分享,在看等操作!!!