Archive for July 24th, 2006

n-tier应用的profiling

Monday, July 24th, 2006

近来在分析一个三层架构Web应用的性能问题。由于应用响应速度慢,需要分析出耗时的瓶颈到达在哪里,所以在数据库起了监控服务、在Application server写了log、甚至还分析了HTTP server的log。因为性能瓶颈可能出现在1)浏览器到Application Server的网络连接;2)Application server的用户代码;3)Application server到数据库服务器的网络连接;4)数据库服务器上运行的SQL和各种存储过程、触发器等。

很需要一个工具可以简单的从浏览器发出请求后,一路钻到web server,application server和database server里面,看看分别在各处消耗了多少时间,在路上花了多少时间,并且能图示化的显示请求和响应一来一回的profiling的全过程。

在不插入定制代码的情况下,要实现这样的功能难度很大。在DB这端可以在JDBC上加层wrapper捕获对数据库的请求;在application server这端可以在container级别捕捉到对DB的请求,然后分别记录并跟踪。“捕捉”似乎有些AOP的意思,如果对资源的访问都可以映射到有限的API上的话,AOP应该是个合理的解决方法。

如果有人知道有这样的整合式profilier,能免去那些debug的”System.out”和在应用、数据库服务器各处设置的绊马索,就太好了。