2016-11-01 3 views
0

평상시와 마찬가지로, 또 다른 이상한 문제가 있습니다. 어디서나 액세스 할 수있는 NGINX 웹 서버가 있습니다. uWSGI를 사용하여 파이썬 파일을 제공하고 있습니다. 파이썬 파일 내에서 나는 같은 컴퓨터에서 실행중인 mysql 데이터베이스로부터 정보를 얻기 위해 mysql-connector 라이브러리를 사용한다. (이 기계는 raspbian을 실행하는 나무 딸기 파이입니다.) 데이터베이스와 연결하고 json에서 일부 정보를 반환하는 문자열과/resources 페이지를 반환하는 인덱스 페이지가 있습니다.파이썬 플라스크 타임 아웃? FLASK + NGINX + uWSGI

15 분이 지나면 모든 것이 고장납니다. 서버가 응답하지 않게되고 '잘못된 게이트웨이'오류 또는 '시간 초과'오류가 표시됩니다. 원인을 좁히기 위해 uWSGI를 다시 시작 했으므로 내 앱을 다시 온라인 상태로 되돌립니다. 이것은 그 것이 든 아니면 내 플라스크 서버 든 어떻게 든 의미합니다.

나는 다음과 같은 링크를 사용 : 나는 그것이 매우 어려운이 정보를 찾을 http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/

: 나는 다음과 같은 링크를 사용했다. 무엇이 될 수 있습니까? 이 문제를 어떻게 해결할 수 있습니까? 가능한 수정은 무엇입니까?

UWSGI 로그 파일 로그

클럭 소스 : 유닉스 CPU 코어의 검출 갯수 : 4 현재 작업 디렉토리 :/홈/PI 감지 바이너리 경로 :/usr/지방/빈/uwsgi ! 내부 라우팅 지원, pcre 지원으로 재 구축 !!! * 경고 :이 마스터 프로세스 매니저없이 uWSGI을 실행하는 당신의 프로세스 번호 제한은 7336 메모리 페이지 크기는 4096 바이트 가 최대 파일 기술자 번호 검색입니다 : 65536 잠금 엔진 : pthread와 강력한 뮤텍스를 천둥 잠금 : 비활성화 됨 --thunder-lock을 사용하여 활성화 할 수 있음 uwsgi 소켓 0이 UNIX 주소에 바인드 됨 /var/www/demoapp/demoapp_uwsgi.sock fd 3 Python 버전 : 2.7.9 (기본값, Sep 17 2016, 20:55) : 23) [GCC 4.9.2] PythonHome을/var/www/demoapp/venv로 설정하십시오. 파이썬 스레드 지원이 비활성화되어 있습니다. 당신은 백 로그 (100 개) 연결 노동자 우아한 작업에 대한 당신의 자비로 제한됩니다 듣고 파이썬 주요 인터프리터가 0x67b490 서버 소켓 초기화 --enable-스레드를 활성화 할 수 있습니다 것은 60초 은 대한 64,256 바이트 (62킬로바이트)를 매핑 1 코어 작동 모드 : 단일 프로세스 /pythonpath에/var/www/demoapp /가 추가되었습니다. WSGI 응용 프로그램이 0 (마운트 포인트 = '') 통역 0x67b490 PID에 0 초 준비 : 32,459 (기본 응용 프로그램) uWSGI 여러 인터프리터 모드로 실행 * 는 uWSGI 노동자 1 (유일한) (PID를 양산 : 32459 , 코어 : 1)

+0

음 ... 흥미 롭습니다. 얼마나 많은 uWSGI 작업자 또는 스레드를 실행하고 있습니까? 최소한 3 명의 근로자가 있어야합니다. 또한 로그 파일 (NGINX, uWSGI, 플라스크)에 정보가 있습니까? –

+0

시간을내어 주셔서 감사합니다. 로그 파일의 마지막 몇 행을 추가했습니다. 나는 단지 1 명의 근로자가있는 것처럼 보입니다. 어떻게 1 명의 작업자 블록이 그렇게 빨리 오지? 그리고 어떻게 더 추가합니까? – Stephen

+1

대개 작업자가 요청을 수락하고 I/O 작업을 수행해야하므로 (예 : 데이터베이스에서 읽음) 한 명의 작업자가 차단됩니다. 한 명의 작업자 만 있기 때문에 문제가됩니다. 몇 가지 팁을 보려면 [docs] (http://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html)를보십시오 (이 페이지에서'프로세스들 '을 검색 할 수 있습니다). 명령 행에서'-p num' 옵션을 사용하거나 구성 파일에서'processes = num' (num은 원하는 프로세스의 정수) 옵션을 사용하여 작업자 수를 늘릴 수 있습니다. 추가 설명이 필요한 경우 알려 주시기 바랍니다. –

답변

2

이것은 작업자 차단 문제입니다.

대개 작업자가 요청을 수락하고 I/O 작업을 수행하기 때문에 하나의 작업자가 차단됩니다 (예 : 데이터베이스에서 읽음). 한 명의 작업자 만 있기 때문에 문제가됩니다.

일부 도움말은 docs을 참조하십시오 (이 페이지에서 processes을 검색 할 수 있음).명령 줄에서 -p num 옵션을 사용하거나 구성 파일에서 processes = num을 사용하여 작업자 수를 늘릴 수 있습니다 (num은 원하는 프로세스의 정수입니다).

관련 문제