Vous n'êtes pas identifié(e).
Bonjour,
Comme je m'intéresse à la mise en production d'une application Django ; je me suis lancé.
J'ai donc installé nginx, uwsgi, virtualenv.
Par curiosité, comme je trouvais ça assez lent, j'ai lancé la commande suivante :
ab -c 10 -n 100 https://domain.tld/
qui me retourne :
Requests per second: 1.89 [#/sec] (mean)
Time per request: 5279.598 [ms] (mean)
Time per request: 527.960 [ms] (mean, across all concurrent requests)
Transfer rate: 25.48 [Kbytes/sec] received
Donc à peu près 1.8 req/secondes. Ce qui explique la lenteur.
Comme je n'y connais pas grand chose en mise en production d'application, j'aurais besoin d'un coup de pouce pour trouver une piste.
Voici quelques informations :
CPU: Intel(R) Atom(TM) CPU N2800 @ 1.86GHz (4 CPU apparemment)
RAM: 2Go
UWSGI en mode socket
Nginx qui utilise le socket et dessert les fichiers statiques
Ma configuration UWSGI est la suivante :
[uwsgi]
chdir = /srv/www/domain/django/collection
module = collection.wsgi:application
master = true
processes = 10
socket = /srv/www/domain/django/django.sock
vacuum = true
uid = http
disable-logging = true
# environment
plugins = python
virtualenv = /srv/www/domain/django/venv
env = LANG=fr_FR.UTF-8
env = DJANGO_ENV=production
env = SECRET_KEY="nawak"
env = POSTGRES_DB=django
env = POSTGRES_USER=django
threads = 2
enable-threads = true
max-worker-lifetime = 30
harakiri = 20
max-requests = 5000
Côté Nginx, j'ai :
upstream django {
server unix:///srv/www/domain/django/django.sock;
}
server {
listen *:80;
listen [::]:80;
server_name domain.tld;
index index.html;
# ACME challenge
include /etc/nginx/letsencrypt;
return 301 https://$host$request_uri;
}
server {
listen *:443 ssl http2;
listen [::]:443 ssl http2;
server_name domain.tld;
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
include /etc/nginx/ssl_params;
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
# ACME challenge
include /etc/nginx/letsencrypt;
proxy_set_header X-Real-IP $remote_addr;
# Django application
location /static {
alias /srv/www/domain/django/collection/static;
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
J'ai beau chercher et modifier des paramètres, sans résultat concluant. Plus je tente des choses et plus je m'y perds.
Je vous remercie d'avance pour toute l'aide que vous pourriez m'apporter à cela,
Olivier.
Dernière modification par blankoworld (09-02-2018 09:17:47)
Hors ligne
Bonjour,
C'est effectivement lent et ce n'est pas normal.
Il y a tellement de paramètres qui peuvent poser le problème qu'il est impossible de dire à priori si c'est normal.
En premier lieu, tester en local avec la debug toolbar et voir le résultat indiqué pour savoir si c'est un souci sur la plateforme ou du coté projet développé.
Hors ligne
Merci pour la réponse, j'ai cru un moment que personne ne déployait Django
C'est effectivement lent et ce n'est pas normal.
Est-ce que par hasard on sait à combien cela devrait avoisiner, par exemple avec une simple page statique et un template qui complète le "title" dans la page ?
J'ai tenté pour voir avec plusieurs fichiers statiques (JS, images, CSS) et une page HTML avec juste "load static" pour les fichiers statiques, je suis à 10 req/sec.
Il y a tellement de paramètres qui peuvent poser le problème qu'il est impossible de dire à priori si c'est normal.
En premier lieu, tester en local avec la debug toolbar et voir le résultat indiqué pour savoir si c'est un souci sur la plateforme ou du coté projet développé.
Alors oui je ne l'ai pas dit, entre temps c'est ce que j'ai fais, une requête n'était pas optimisée. Je suis cependant passé à 4req/sec en la modifiant (soit 2 fois plus rapide).
Ça me paraît toujours assez lent.
J'ai donc tenté de séparer ma page en plusieurs pages :
Une page listant tous les éléments (7 req/sec).
Une page ne listant qu'une partie des éléments (en appliquant un filtrage) (5 req/sec)
Quelque noms pour la suite (espérons qu'il y ait une suite !) :
Soit Homepage la page d'accueil, désormais statique (page bootstrap/js/css/html5 standard). Elle est à 10 req/sec.
Soit Items la page contenant la liste de tous mes éléments (148 éléments) affichés sur la même page. Elle est à 7 req/sec.
Soit Summary la page contenant deux listes filtrées de mes éléments (moins de 10 éléments chacune). Elle est à 5 req/sec.
Je note qu'en local, Homepage fait du 45 req/sec environ.
Ai-je vraiment fait autant de merde que ça ? Car sur une autre application où la page d'accueil renvoit chaque fois sur le login de l'admin, ça prend 365 req/sec en local (forcément ça fait juste un redirect et basta).
Hors ligne