Django、DRF、nginx、Jmeter:即使 CPU 没有负载等,采样时间也会变大

Posted

技术标签:

【中文标题】Django、DRF、nginx、Jmeter:即使 CPU 没有负载等,采样时间也会变大【英文标题】:Django, DRF, nginx, Jmeter: Sample Time becomes large even though there is no load on the CPU, etc 【发布时间】:2022-01-16 21:23:31 【问题描述】:

我正在使用JmeterDRF进行负载测试,即使CPU和内存不是100%,吞吐量和响应时间也很慢。

Django + nginxPostgres 服务器是分开的,两者都有以下规格 4CPU,4GB 内存。

nginx 正在使用 docker 的https-portal 如下所示。

version: "3"

services:
  https-portal:
    image: steveltn/https-portal:1
    ports:
      - "80:80"
      - "443:443"
    environment:
      DOMAINS: "my.domain.com -> http://backend:8000"
      STAGE: "production"
    volumes:
      - https-portal-data:/var/lib/https-portal
      - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
      - ./static:/static
    depends_on:
      - backend
    restart: always

  backend:
    build: .
    command: uwsgi --http :8000 --module myapp.wsgi --processes 4
    volumes:
      - .:/usr/src/app
      - ./static:/usr/src/app/static
    expose:
      - 8000
    env_file:
      - .env
      - .env.prod
    restart: always

volumes:
  https-portal-data:

查看 django 日志,django 似乎没有任何问题,您认为可能是什么原因造成的? generated 8302 bytes in 29 msecs (HTTP/1.0 200) 7 headers in 208 bytes (1 switches on core 0)

设置 Jmeter:

Django + nginx 服务器:

数据库(postgres)服务器:

连续加载 5 分钟后。

如果您需要任何其他信息,请告诉我。

【问题讨论】:

【参考方案1】:
    通过profiler tool检查您的应用程序性能 根据结果,您可能还想check Postgresql query logs and stats Don't run JMeter in GUI mode,您可能会得到假阴性结果,因为 JMeter 无法足够快地发送请求和/或由于垃圾收集而卡住 关注其他 JMeter Best Practices 并确保 JMeter 不缺少 CPU、RAM 等。

【讨论】:

谢谢。我检查了一切,情况并没有改善。 nginx可能是原因吗?

以上是关于Django、DRF、nginx、Jmeter:即使 CPU 没有负载等,采样时间也会变大的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Elastic Beanstalk 上使用 Nginx、React、Webpack、Gunicorn、PostgreSQL、Django 和 DRF 部署应用程序?如何使用此应用程序处

在 Django/DRF 中使用 JWT 身份验证并将 JWT 存储在 HttpOnly Cookie 中

drf——认证

drf 前戏—CBV的使用及源码流程

DRF之解析器组件及序列化组件

django+vue前后端分离项目部署