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 makemigrations

python manage.py migrate

python 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自带的页面,如下:
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查询详细
如果你想查看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文件。
profiling
.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

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django性能优化可以从多个方面入手,以下是一些常用的方法步骤: 1. 使用缓存:Django 内置了多种缓存机制,包括内存缓存、文件缓存、数据库缓存等。可以根据自己的需求选择合适的缓存机制,从而减少数据库查询次数,提高访问速度。 2. 使用索引:在数据库中创建索引可以提高查询速度,特别是针对大型表的查询。需要根据实际情况选择合适的字段创建索引,避免创建过多的无用索引导致性能下降。 3. 优化 SQL 查询:可以使用 Django Debug Toolbar 等工具来分析 SQL 查询语句,找出慢查询和多余查询,进行优化。 4. 使用缓存模板:可以使用缓存模板来避免每次请求都重新渲染模板,从而减少服务器负担和响应时间。 5. 优化静态文件:可以使用 CDN 加速静态文件访问,同时可以压缩和合并 CSS、JS 等文件,减少请求次数。 6. 使用异步任务:可以使用 Celery 等异步任务框架来处理一些耗时的操作,从而避免阻塞主线程,提高并发处理能力。 7. 使用数据库连接池:可以使用 Django 自带的数据库连接池或者第三方库来管理数据库连接,避免频繁创建和销毁连接,提高数据库访问效率。 8. 使用性能分析工具:可以使用 Django Debug Toolbar、django-silk性能分析工具来定位性能瓶颈,找出需要优化的地方。 以上是一些常用的 Django 性能优化方法步骤,需要根据具体情况进行选择和实施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值