Tornado Web服务器中的定期高响应时间

时间:2016-07-01 22:52:27

标签: php python tornado

我已经实现了一个Tornado网络服务器来处理来自另一个PHP网络服务器的请求。 php请求将导致在响应之前进行一些简单而一致的数据处理。但是,当我查看日志时,我会定期看到响应时间的峰值。例如:

INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.247) 3.33ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.222) 3.43ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.247) 3.55ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.222) 3.36ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.247) 58.56ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.222) 3.22ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.222) 3.20ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.247) 3.28ms
INFO:tornado.access:200 POST /v1/conversion/ (192.168.21.222) 3.34ms

我在php请求(100ms)上有一个相对紧张的超时窗口,并且偶尔会触发它。到目前为止,我一直无法确定原因。

到目前为止我采取的一些步骤:

  1. 使用时间码将RequestHandler中的代码包围,并将其配置为记录,如果我的代码运行时间超过10毫秒。这从未出现在日志文件中。所以似乎我的RequestHandler代码并没有导致它。
  2. 在其中一个超时中捕获从PHP服务器发送到Tornado的数据。我尝试在隔离的环境中重新发送一些这些请求,并且他们在通常的时间(3-5ms)内做出响应,所以它似乎不是由请求引起的。
  3. 这是在一个流量很大的环境(每秒数百个请求)中运行的,所以我还增加了服务器数量,以便更好地处理负载。这大大减少了超时次数,但没有消除它们。
  4. 如果有任何其他信息有帮助,请告诉我,我会尽力提供。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

IOLoop.set_blocking_log_threshold是调试这类问题的工具之一。调用IOLoop.current().set_blocking_log_threshold(0.010),只要有任何东西阻塞IOLoop超过10毫秒,它就会记录一个堆栈跟踪。