本文主要是介绍django性能监测工具silk使用方法(初级),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
django-silk介绍
web开发过程中,经常要掌握程序的性能状况,遇到性能瓶颈还要进行进一步的分析,如执行时间、网络耗时、数据库连接时间等;如果你是基于django框架开发,那接下来,那么django-silk将会成为你的得力助手。
环境需求
- Django: 1.11, 2.0
- Python: 2.7, 3.4, 3.5, 3.6
安装
django-silk地址:
https://github.com/jazzband/django-silk
# pip install -U django-silk
如果你的python版本是3.x,则使用pip3 install -U django-silk
提示:建议使用virtualenv进行开发包的管理
# virtualenv --system-site-packages -p python3 自定义名称
# source 自定义名称/bin/activate
配置
在settings.py文件中加入如下内容:
INSTALLED_APPS = (...'silk'
)MIDDLEWARE = [...'silk.middleware.SilkyMiddleware',...
]
在url.py中加入
urlpatterns += [url(r'^silk/', include('silk.urls', namespace='silk'))]
然后生成silk用的相关数据库表
python manage.py makemigrationspython manage.py migratepython manage.py collectstatic
如果settings.py中没有配置过STATIC_ROOT,在执行“python manage.py collectstatic”的时候,有可能会报错,提示缺少STATIC_ROOT配置。加上即可。如:STATIC_ROOT = BASE_DIR。
在这之后,就可以使用silk了。
查看性能报告
启动项目:
python manage.py runserver
访问:项目网址/silk(如:http://127.0.0.1:8080/silk),可以看到silk自带的页面,如下:
通过页面,我们可以看到很多GET、POST请求,以及各种数字。代表silk可以记录的数据
- 所用时间(Time taken)
- 数查询(Num. queries)
- 查询花费的时间(Time spent on queries)
- 请求/响应标头(Request/Response headers)
- 请求/响应正文(Request/Response bodies)
点击相关请求还可以获得有关每个请求的更多详细信息:
如图例,本次请求的method是POST,访问的url是/admin/,总耗时793毫秒,查询花费2毫秒,共7次查询。如果你想看具体每次查询的内容,可以点击页面左上方的SQL,继而可以看到所有的查询,以及每次查询的消耗时间。
如果你想查看SQL具体都执行了什么代码,可以点击继续深入
如果你想查看查询的过程哪个环节耗费了多少时间,请进入Profiling。需要我们在setting.py中配置
# 使用Python的内置cProfile分析器
SILKY_PYTHON_PROFILER = True
# 生成.prof文件,silk产生的程序跟踪记录,详细记录来执行来哪个文件,哪一行,用了多少时间等信息
SILKY_PYTHON_PROFILER_BINARY = True
# .prof文件保存路径(最好不要像我这样设置在项目目录中)
# 如果没有本设置,prof文件将默认保存在MEDIA_ROOT里
SILKY_PYTHON_PROFILER_RESULT_PATH = os.path.join(BASE_DIR, 'logs')
经过上述设置后,每次请求都会生成一个prof文件,而且名称无意义。所以我们进行性能分析时一定要及时分析,否则回头再找prof文件,就会比较麻烦,不过,也没有那么麻烦。
这些信息在页面中也可以查看,不是必须要生成prof文件。
.prof是二进制文本文件,一般的编辑器看不到可读内容。所以我们需要借助一些工具。我使用的是SNAKEVIZ。
SNAKEVIZ
安装
# pip install -U snakeviz
查看prof
# snakeviz /path/to/your/program.prof
记录
记录profiling的时候,我们需要给每个请求起个名字,作为标识
from silk.profiling.profiler import silk_profile
...
@silk_profile(name='View Blog Post') # name=你自己设置的请求标识
def post(request, post_id):p = Post.objects.get(pk=post_id)return render_to_response('post.html', {'post': p})
...
还有一种方法,可以查看具体某一个数据库操作的性能
def post(request, post_id):with silk_profile(name='View Blog Post #%d'%self.pk):p = Post.objects.get(pk=post_id)return render_to_response('post.html', {'post': p})
然后就可以探索了。
进一步的使用方法的心得,以后再记录
参考一篇SnakeViz GitHub的中文翻译:
https://www.helplib.com/GitHub/article_118718
这篇关于django性能监测工具silk使用方法(初级)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!