我使用Flask创建了一个API服务器,我使用(Current Signin State: {{skypeClient.state()}} )
和gunicorn
来运行它。我注意到在调用API时Flask服务器的响应时间很长。我对我的客户进行了分析,一个从我的笔记本电脑上运行,一个直接在Flask API服务器上运行。
从我的笔记本电脑:
eventlet
在服务器上:
302556 function calls (295712 primitive calls) in 5.594 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
72 4.370 0.061 4.370 0.061 {method 'poll' of 'select.epoll' objects}
16 0.374 0.023 0.374 0.023 {method 'connect' of '_socket.socket' objects}
16 0.213 0.013 0.213 0.013 {method 'load_verify_locations' of '_ssl._SSLContext' objects}
16 0.053 0.003 0.058 0.004 httplib.py:798(close)
52 0.034 0.001 0.034 0.001 {method 'do_handshake' of '_ssl._SSLSocket' objects}
所以,我看到我的客户端花了很长时间等待服务器响应基于配置文件结果。
我使用 231449 function calls (225936 primitive calls) in 3.320 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
12 2.132 0.178 2.132 0.178 {built-in method read}
13 0.286 0.022 0.286 0.022 {method 'poll' of 'select.epoll' objects}
12 0.119 0.010 0.119 0.010 {_ssl.sslwrap}
12 0.095 0.008 0.095 0.008 {built-in method do_handshake}
855/222 0.043 0.000 0.116 0.001 sre_parse.py:379(_parse)
1758/218 0.029 0.000 0.090 0.000 sre_compile.py:32(_compile)
1013 0.027 0.000 0.041 0.000 sre_compile.py:207(_optimize_charset)
12429 0.023 0.000 0.029 0.000 sre_parse.py:182(__next)
与gunicorn
一起为Flask应用程序提供流量配置:
eventlet
我的客户端是一个自定义HTTP客户端,使用import multiprocessing
bind = ['0.0.0.0:8000']
backlog = 2048
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'eventlet'
user = 'www-data'
group = 'www-data'
loglevel = 'info'
来修补eventlet
并创建一个连接到服务器的池。
我坚持在这里进行故障排除。所有服务器统计信息均正常。如何检测API服务器的瓶颈?