Gunicorn이란?

작성자 이호영 수정일 2022-10-14 16:01

#gunicorn, #evicted, #pending, #TwinReader

아티클 관련 제품: TwinReader

들어가며

  • Gunicorn에 대해 알아보겠습니다.



Gunicorn이란?

  1. 등장 배경
      ▪ Client의 요청이 다양, 복잡해지면서 동적인 파일에 대한 요청이 늘어남에 따라 Aplication server가 등장하게 되었습니다.
      ▪ 파이썬 스크립트의 Object 형식과 HTTP 의 text형식의 서로 요청 받는 형식이 달라 이에 대한 처리 문제가 발생되어
    등장하게 되었습니다.
            
  2. gunicorn
      ▪ 파이썬의 Web Server Gateway interface (WSGI)를 구현하는 HTTP server입니다.
      ▪   Gunicorn.config.py에서 python code로 작성하거나 command line 명령어 인자로 실행 가능합니다.
  3. Web Server Gateway interface (WSGI)
     ▪  웹 서버 소프트웨어와 파이썬으로 작성된 웹 응용 프로그램 간의 표준 인터페이스입니다.


ERROR

  • gunicorn과 관련하여 장애가 발생하였을 경우 다양한 발생 원인과 장애가 존재합니다.
  • 여기서 다룰 ERROR의 경우 아래 2가지 상황이 동시에 발생 되었을 때입니다. 


  ① 시스템 사용량 확인 가능한 top 명령어로 조회하였을 때  비정상적인 gunicorn 사용량이 보이며

top
 PID     USER      PR  NI    VIRT    RES    SHR   S   %CPU  %MEM    TIME+    COMMAND 
26441    root      20   0    16.4g   5.1g   1.4g  S   0.3   4.0    8:16.04  gunicorn
26171    root      20   0    17.0g   5.0g   1.5g  S   0.3   4.0    8:19.49  gunicorn
26398    root      20   0    17.1g   4.9g   1.5g  S   0.3   3.9    8:15.46  gunicorn
26345    root      20   0    15.5g   4.9g   1.4g  S   0.3   3.9    8:14.05  gunicorn
26256    root      20   0    15.8g   4.9g   1.4g  S   0.3   3.9    8:14.39  gunicorn
26302    root      20   0    16.1g   4.9g   1.4g  S   0.0   3.9    8:13.92  gunicorn
26140    root      20   0    11.5g  721552 609884 S   0.0   0.5    9:16.75  tritonserver
15336    root      20   0    11.5g  715908 609116 S   0.0   0.5    8:55.17  tritonserver
 4181    root      20   0   575688  469660  71220 S   1.0   0.4   76:35.23  kube-apiserver
10254   systemd+   20   0  2524064  424088  34824 S   0.0   0.3    2:08.99  mysqld
 1039    root      20   0   457392  285160 275968 S   0.0   0.2    0:35.77  systemd-journal
15426    root      20   0  3388892  270196  39716 S   0.0   0.2    7:49.22  python3
2955138  root      20   0  1205336  179820  48556 S   0.0   0.1    0:12.33  node
 1655    root      20   0  8451408  164704  53532 S   2.3   0.1  210:08.69  dockerd
 1665    root      20   0  5339800  136496  63720 S   2.0   0.1  137:25.17  kubelet 
 4250    root      20   0   219320  113404  51668 S   0.3   0.1   52:56.08  kube-controller
2955425  root      20   0   659840   98940  30984 S   0.0   0.1    0:02.34  node
13630    root      20   0  1567952   98892  46276 S   0.0   0.1    1:47.91  python3
 4328    root      20   0    10.1g   98516  21844 S   0.7   0.1   37:58.23  etcd
2955439  root      20   0   659840   98452  30984 S   0.0   0.1    0:02.46  node
2955432  root      20   0   659828   95836  30924 S   0.0   0.1    0:02.44  node
13629    root      20   0  1567952   94248  45680 S   0.0   0.1    1:48.47  python3

  


 ② 생성되는 pod의 비정상적인 증가

kubectl get pod -A
NAMESPACE                                NAME                     READY  STATUS  RESTARTS  AGE
twinreader  core-client-7d9ccd8d74-brrrd                           1/1   Running    1       8d
twinreader  core-server-classification-deployment-678dd7d488-fc7m2 1/1   Running    1       8d
twinreader  core-server-gpu-0-deployment-99dc8d8df-6tjft           0/1   Evicted    0       92s
twinreader  core-server-gpu-1-deployment-85f6d68878-sbmtb          0/1   Evicted    0       89s
twinreader  core-server-gpu-1-deployment-99dc8d8df-6tjft           0/1   Evicted    0       81s
twinreader  core-server-gpu-0-deployment-85f6d68878-sbmtb          0/1   Evicted    0       78s
twinreader  core-server-gpu-1-deployment-99dc8d8df-6tjft           0/1   Evicted    0       67s
twinreader  core-server-gpu-0-deployment-85f6d68878-sbmtb          0/1   Evicted    0       54s
twinreader  core-server-gpu-0-deployment-99dc8d8df-6tjft           0/1   Evicted    0       44s
twinreader  core-server-gpu-1-deployment-85f6d68878-sbmtb          0/1   Evicted    0       28s
twinreader  core-server-gpu-0-deployment-99dc8d8df-6tjft           0/1   Pending    0       15s
twinreader  core-server-gpu-1-deployment-85f6d68878-sbmtb          0/1   Pending    0       12s
twinreader  fs-deployment-78996664f4-4xzgh                         1/1   Running    2       132d
twinreader  gunicorn-post-test-deploy-8b565fff6-hsghq              1/1   Running    1       14d
twinreader  ingress-nginx-admission-create-fllnk                   0/1   Completed  0       135d
twinreader  ingress-nginx-admission-patch-x79v4                    0/1   Completed  0       135d
twinreader  ingress-nginx-controller-7586f485b7-9mtwx              1/1   Running    2       135d
twinreader  mgr-deployment-7b54cb98fb-rklkw                        1/1   Running    1       8d
twinreader  mysql-59f96bbcb8-t9qw7                                 1/1   Running    2       134d
twinreader  test-core-deployment-7489647d98-brqwc                  1/1   Running    1       11d
twinreader  webui-deployment-8db895bd4-zcqhb                       1/1   Running    1       11d

           상태를 검색하였을 때 위의 2가지와 같다면 운영되는 서비스를 재 구동 시켜주시기 바랍니다.

  • pod 삭제하기
    kubectl delete pod [삭제 할 pod name]

  • pod 목록 확인
    kubectl get pod --all-namespaces


마무리

  • python script(= Web Application)가 Web Server와 통신하기 위한 인터페이스로 Web Server 요청을 해석하여 python application으로 요청을 전달하는 역할을 하는 gunicorn에 대해 알아 보았습니다.
  • pod 관련 Evicted Error 사항은 pod 상태가 evicted 일 때를 참고하여 주시기 바랍니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300