django2.2 python3.6 nginx 时不时的出现下面错误,网站很卡,然后就 出现: 502 Bad Gateway 然后自已又变好了。速度快起来

2020-03-21 00:20:46 +08:00
 python30
绑名的域名:
gq.xxbbbb.com www.xxbbbb.com

django2.2 python3.6 nginx

不知道什么原因
时不时的出现下面错误,网站很卡,然后就 出现:502 Bad Gateway 然后自已又变好了。速度快起来



日志:
2020/03/21 00:03:53 [error] 1084#0: *7404 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 66.249.71.49, server: gq.xxbbbb.com, request: "GET /company/13864311189/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:92001", host: "www.xxbbbb.com"
2020/03/21 00:03:56 [error] 1085#0: *7374 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 157.55.39.81, server: gq.xxbbbb.com, request: "GET /class/info/11329 HTTP/1.1", upstream: "uwsgi://127.0.0.1:92001", host: "www.xxbbbb.com"
2020/03/21 00:04:07 [error] 1084#0: *7407 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 123.169.102.171, server: gq.xxbbbb.com, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://127.0.0.1:92001", host: "www.xxbbbb.com", referrer: "https://www.xxbbbb.com/m/tags/xxx/"
2020/03/21 00:04:20 [error] 1084#0: *7461 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 203.208.60.76, server: gq.xxbbbb.com, request: "GET /class/info/4205 HTTP/1.1", upstream: "uwsgi://127.0.0.1:92001", host: "gq.xxbbbb.com"
2020/03/21 00:04:25 [error] 1084#0: *7416 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 103.14.35.86, server: gq.xxbbbb.com, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://127.0.0.1:92001", host: "www.xxbbbb.com", referrer: "https://www.xxbbbb.com/"


是人数一多了。超时了?
2866 次点击
所在节点    Python
12 条回复
a719114136
2020-03-21 01:33:22 +08:00
从现象来看很可能是并发太高了,一般是 uwsgi 超时了。

最好改用 gunicorn,uwsgi 配置太复杂了,一堆配置不知道改哪个。
jenlors
2020-03-21 09:33:20 +08:00
nginx 配置,系统参数,uwsgi 都可以针对高并发调优。
676529483
2020-03-21 09:33:22 +08:00
502 超时了,看看是不是有接口速度太慢影响了,或者也可以看下是不是带宽满了
python30
2020-03-21 11:22:46 +08:00
确实是人数一多就这样卡住了
但是配配是 2 核 4G 3M 的
不应该是带宽问题
因为 1 分钟最大同时在线才 18 人就卡住了

下面是我的配置参数,刚从网上看了教程改的
不知道还有需要优化或有错的地方不?

centos7.5 python3.6 django2.2



ps: 在卡住的那个时间点我看了一下日志
还有少少百度蜘蛛来网站!难道这个也有关系?

uwsgi.conf
```
# myweb_uwsgi.ini file
[uwsgi]

#django-related settings
socket = 127.0.0.1:8001
# the base directory (full path)
chdir = /var/www/website

# Django s wsgi file
module = website.wsgi:application

env = DJANGO_SETTINGS_MODULE = website.settings
daemonize = /var/log/nginx/website_access.log;
# process-related settings
# master
master = true
py-autoreload = 1

# maximum number of worker processes
processes = 4
threads = 2
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
```




nginx.conf

```
user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 20000;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
client_header_buffer_size 4k;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

include /etc/nginx/conf.d/*.conf;

server {
listen 443;
server_name website.com;
ssl on;
ssl_certificate 1_www.website.com_bundle.crt;
ssl_certificate_key 2_www.website.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
charset UTF-8;
access_log /var/log/nginx/website_access.log;
error_log /var/log/nginx/website_error.log;

client_max_body_size 75M;
fastcgi_buffers 8 128k;
fastcgi_busy_buffers_size 128k;


location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
uwsgi_send_timeout 300;
uwsgi_connect_timeout 300;
uwsgi_read_timeout 300;
}
location /static {
expires 30d;
autoindex on;
#return 403;
add_header Cache-Control private;
alias /var/wwwr/website/static/;
}
location /media {
expires 30d;
autoindex on;
#return 403;
add_header Cache-Control private;
alias /var/wwwr/website/media/;
}
}
```
lance86
2020-03-21 11:41:28 +08:00
没有用过 uwsgi,不过你试试把 uwsgi 配置中的 theads 调大一些?
奇怪的是你 nginx 上配置的 timeout 是 300s 啊,你也试试在 django 里把把个请求的花费时间给记录一下,主要看下有没有卡住。
顺便可以在 nginx 的 log 格式中加上$upstream_response_time,作为参考,可以看看是不是卡住之前,response time 都变长了。
python30
2020-03-21 12:00:41 +08:00
@lance86 我把 theads 设成了 4 了 感觉 4-10 都可以。

上面的是我修改后的配置
修改后现在网站上没人在线
也不知道这配置起作用不
xpresslink
2020-03-21 14:30:04 +08:00
上 gevent 啊,这种情况虽然不能提高性能,但是能拖住更多连接。
uwsgi.conf
加一行

# 使用 gevet 异步 loop
gevent=128

然后$ source venv/bin/activiate;pip install gevent
hushao
2020-03-21 21:32:29 +08:00
会不会是数据库问题?我之前貌似碰到过数据库导致此类问题。只是提供一种参考
python30
2020-03-21 21:45:57 +08:00
@xpresslink
谢谢
今天一直没出现这问题
明天在线人数多的时候出现这问题。我再修改
python30
2020-03-21 21:47:00 +08:00
@hushao
能详细说说吗?
还真有可能是这事
我刚从 mysql5.6 mysqldump 备份
直接导入到 mysql5.7 里面!
你当时是怎么解决的?
python30
2020-03-23 11:12:55 +08:00
@hushao 又出现这个问题了
请问一下,你当时是怎么处理的你的数据库?
Skyline57
2020-05-19 17:04:48 +08:00
看看系统占用?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX