十台服务器上部了二十个tornado进程,每台上两个。前面用nginx做负载,目前还不清楚nginx的负载是怎么一会事儿。tornado处于阻塞状态了,为啥还会把请求打过去。不过刨除nginx的事不说,重点还是在tornado为啥阻塞。
从日志中看不出啥异常情况,只能看到从某个get请求之后日志就不再更新了,而最后一个请求并不是导致阻塞的请求。请求的日志是在你的web服务器响应完之后才打印出来的。因此从日志看不出来。当然,你可以在不同url请求中用logger打印出日志,来帮你定位问题在哪。不过这种办法需要修改的东西太多。
于是我想到了用apache的ab压力测试的工具来测试下,看看能否重现这个问题。下午测试了,果然找到了问题所在。在tornado中我还不太会使用异步这样的东西,因此程序很容易阻塞。另外对与第三方数据的请求timeout的时间有些长。
突然想起来,上面的这类异常的分析应该是我在之前的面试中遇到过的,只不过当时没有具体的方案。
说了这么多废话,来说ab测试吧,其实ab测试就是一个简称ab的工具的使用。
只针对ubuntu说,其他的系统没用过不了解,不过大体应该一样。
在命令行输入ab回车,应该会提示你要安装apache的一个工具,执行那个命令就行了。然后就是测试了。
我用的命令就是:ab -n 4000 -c 500 http://test.com/test?a=1
意思就是4000个请求,500个并发。这应该就是模拟500个用户,
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈