문제

나는 장고를 통해 실행 WSGI 다음과 같다:

<VirtualHost *:80>
    WSGIScriptAlias / /home/ptarjan/django/django.wsgi
    WSGIDaemonProcess ptarjan processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup ptarjan
    Alias /media /home/ptarjan/django/mysite/media/
</VirtualHost>

하지만 경우에는 파이썬 I do:

def handler(request) :
    data = urllib2.urlopen("http://example.com/really/unresponsive/url").read()

전체적인 아파치 서버 중단과가 응답하지 않으로 이 프로그램

#0  0x00007ffe3602a570 in __read_nocancel () from /lib/libpthread.so.0
#1  0x00007ffe36251d1c in apr_file_read () from /usr/lib/libapr-1.so.0
#2  0x00007ffe364778b5 in ?? () from /usr/lib/libaprutil-1.so.0
#3  0x0000000000440ec2 in ?? ()
#4  0x00000000004412ae in ap_scan_script_header_err_core ()
#5  0x00007ffe2a2fe512 in ?? () from /usr/lib/apache2/modules/mod_wsgi.so
#6  0x00007ffe2a2f9bdd in ?? () from /usr/lib/apache2/modules/mod_wsgi.so
#7  0x000000000043b623 in ap_run_handler ()
#8  0x000000000043eb4f in ap_invoke_handler ()
#9  0x000000000044bbd8 in ap_process_request ()
#10 0x0000000000448cd8 in ?? ()
#11 0x0000000000442a13 in ap_run_process_connection ()
#12 0x000000000045017d in ?? ()
#13 0x00000000004504d4 in ?? ()
#14 0x00000000004510f6 in ap_mpm_run ()
#15 0x0000000000428425 in main ()

에서 데비안 Apache2.2.11-7.

마찬가지로 우리가 될 수 있을 보호에 대하여:

def handler(request) :
    while (1) :
        pass

PHP 에서,내가 설정한 시간과 메모리를 제한.

도움이 되었습니까?

해결책

다른 사람이 지정한대로 원하는 '교착 상태'가 아닙니다. 즉,이 경우에 도움이되지 않는 매우 특별한 목적입니다.

mod_wsgi 기능을 사용하려고하는 한 WSGIDAEMOMEMONPROCESS 지시문에 대한 '비활성 타임 아웃'옵션을 원합니다.

그럼에도 불구하고 이것은 완전한 해결책이 아닙니다. 이는 '비활성-시간 초 데몬 프로세스가 단일 스레드 인 경우 요청 당 시간마다 만 동일합니다. 프로세스를 막는 데 도움이 될뿐만 아니라 옵션은 해당 당시에 요청이 전혀 도착하지 않으면 데몬 프로세스를 다시 시작하는 부작용도 갖습니다.

요컨대, MOD_WSGI 레벨에는 요청 시간 초과 당시의 방법이 없습니다. 파이썬에서 요청 또는 스레드를 방해하는 실제 방법이 없기 때문입니다.

실제로 구현 해야하는 것은 애플리케이션 코드의 HTTP 요청의 시간 초과입니다. 그것이 어디에 있는지, 이미 사용 가능한지 확실하지 않지만 'urllib2 소켓 타임 아웃'을 검색하십시오.

다른 팁

는 경우에 저는 잘 이해 질문을 보호하려면 아파치에서 잠금을 실행할 때 어떤 임의의 스크립트에서 사람들이다.잘 실행하는 경우,신뢰할 수 없는 코드,내 생각에 있는 다른 것들에 대해 걱정하는 최악의 보다 apache.

는 말했다,사용할 수 있는 설정 지시어를 조정 안전 환경입니다.이러한 두 개의 아래에 아주 유용합니다:

  • WSGIApplicationGroup -설정되는 응용 프로그램 그룹 WSGI 응용 프로그램에 속한다.그것은 별도의 설정을 위해 각 사용자는 모든 WSGI 응용 프로그램 내에서 동일한 응용 프로그램 그룹은 실행의 컨텍스트 내에서 동일한 Python sub 통역의 과정을 처리하는 요청을 합니다.

  • WSGIDaemonProcess -구성하는 뚜렷한 데몬 프로세스에 대한 응용 프로그램을 실행.데몬 프로세스로 실행할 수 있는 사용자가 다른 어떤 아파치는 자식 프로세스를 정상적으로 실행됩니다.이 지시어는 받는 유용한 많은 옵션,내가 목록을 그들 중 일부:

    • user=name | user=#uid, group=name | group=#gid:

      정의 유닉스는 사용자와 그룹의 이름 또는 숫자의 사용자 uid 또는 그룹 gid 의 사용자/그룹을 데몬 프로세스를 실행해야 합니다.

    • stack-size=nnn

      량의 가상 메모리에서 바이트를 할당한 스택에 해당하는 각 스레드에 의해 만들어 mod_wsgi 에 데몬 프로세스.

    • deadlock-timeout=sss

      정의의 최대 수를 초 허용하기 전에 통과하는 데몬 프로세스가 종료하고 다시 시작한 후에 잠재적인 교착 상태에서는 파이썬 길이 검색되었습니다.기본값은 300 초입니다.

에 대한 자세한 내용을 읽을 수 있는 설정 지시어 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top