Python + twister 효율 관련

Python + twister 효율 관련
옮 겨 싣다http://bigtoy4boy.com/blog/2009/05/performance-tuning-of-nignx-and-twisted/] 최근 이틀 동안 python + twisted 로 작성 한 http 서버 의 효율 을 테스트 해 왔 습 니 다. 몇 차례 심리 적 붕괴 의 위기 에서 뛰 어 들 었 고 숨 을 헐 떡 이 며 흔적 을 남기 고 후발 자 를 깨 웠 습 니 다.이 서비스 프로그램 은 아무런 업무 논리 도 없다. 즉, 많은 연결 을 유지 하고 서버 상태 가 변 경 된 후에 모든 연결 유 지 를 알 리 고 신호 값 을 되 돌려 주 는 것 이다.어떻게 이렇게 많은 연결 을 유지 하 느 냐 가 이 응용 프로그램의 관건 이다.이전에 몇 가지 방안 을 선 택 했 는데 서버 자원 이 너무 소모 되 어 걸핏하면 메모리 가 다 먹 어 버 리 고 C 로 서비스 프로그램 을 처음부터 쓰 는 것 이 귀 찮 기 때문에 python 의 socket 프레임 워 크 twisted 를 선 택 했 습 니 다.이 프로그램 은 처음에 ab (Apache Benchmark) 로 간단하게 눌 렀 는데 문제 가 발견 되 지 않 았 습 니 다. 서버 메모리 와 cpu 의 점용 률 이 높 지 않 아서 신경 쓰 지 않 고 바로 온라인 으로 실 행 했 습 니 다. 실제 실 행 했 을 때 좋 은 데 이 터 는 데이터 가 많 지 않 아서 문제 가 되 지 않 았 습 니 다. 그러나 실제 감 측 된 데 이 터 는 400 정도 의 연결 을 유지 하려 면 40% 의 cpu 를 차지 해 야 합 니 다. 이 수 치 는 약간 높 습 니 다.이렇게 계산 하면 한 대의 기계 가 얼마나 많은 연결 수 를 적재 할 방법 이 없다.그래서 테스트 환경 에서 첫 번 째 스트레스 테스트 를 시작 하여 실제 운영 시의 그 상 태 를 재현 하고 싶 습 니 다.아니면 ab, 500 요청 서비스 프로그램 을 병행 하여 많은 연결 이 예상 시간 에 되 돌아 오지 않 는 다 는 것 을 알 게 되 었 습 니 다. (모든 연결 은 최소 25 초 를 유지 합 니 다) 많은 연결 이 오 랜 시간 이 지나 서 야 되 돌 아 왔 습 니 다.디 버 깅 프로그램 은 하위 스 레 드 부분 에서 디 버 깅 정 보 를 출력 합 니 다. 이 동시에 소수의 스 레 드 만 실 행 될 수 있 고 대부분의 스 레 드 가 걸 려 있 습 니 다. 인상 에서 tisted 유선 스 레 드 탱크 의 개념 은 이러한 매개 변수 reactor. suggestThread PoolSize () 를 찾 았 습 니 다. 기본 값 은 10 입 니 다. 즉, 10 개의 스 레 드 만 처리 할 수 있 습 니 다.이 값 을 내 가 원 하 는 병발 수치 이상으로 크게 바 꾸 면 문제 가 사라 진다.이 수정 은 유용 하 다!ab 를 계속 하고 1000 까지 동시 다발 합 니 다. 프 록 시 서버 의 nginx 로 서 오 류 를 보 고 했 습 니 다. 응답 요청 을 중단 한 이 유 는 무엇 입 니까?nginx 기본 설정 은 시스템 에서 ulimit nofile 수치 와 관련 이 있 습 니 다. 돌파 하 는 방법 은 nginx. conf 설정 파일 에 한 마디 worker_rlimit_nofile 51200; 를 추가 할 수 있 습 니 다. 이 때문에 저 는 게 으 름 을 피 워 서 시스템 의 기본 ulimit - n 값 을 수정 하지 않 았 습 니 다. 지금 은 기본 1024 입 니 다.아니면 ab, 2000 까지 병발 하면 ab 가 이러한 병발 수량 에 이 르 지 않 고 연결 수 를 조금씩 증가 하 는 것 을 느 낄 수 있 습 니 다. 또한 서버 측 cpu 의 점용 률 도 실측 되 지 않 았 습 니 다. 더욱 진실 한 시 뮬 레이 션 을 위해 저 는 python 으로 ab 대신 시 뮬 레이 션 과 발 송 된 프로그램 을 썼 습 니 다. 또한 조회 자 료 를 통 해 twisted 의 기본 reactor 가 selec () 방법 임 을 확인 하 였 습 니 다.이 방법 은 현재 1024 개의 요청 만 동시에 처리 할 수 있 습 니 다. 이 방법 을 돌파 하려 면 epoll 모드 로 전환 해 야 합 니 다. 프로그램 시작 부분 에 다음 과 같은 코드 를 쓰 고 epoll 의 reactor from twisted.internet import epollreactor
epollreactor.install()
가 직접 쓴 압력 테스트 스 크 립 트 를 활성화 시 켜 계속 측정 해 야 합 니 다. 1000 은 문제 가 없 는 것 같 습 니 다. 2000 에 문제 가 생 겼 습 니 다. 제 테스트 스 크 립 트 는 1 천 1 천 원 을 더 해서 2000 까지 추 가 했 을 때...서비스 가 기본적으로 응답 을 멈 추 었 고 대량의 연결 이 기다 리 고 있 으 며 서버 에 많은 요청 이 시간 을 초과 하 였 습 니 다.무슨 이유 일 까요?ulimit 문제 아 닙 니까?아마도 서비스 프로그램 을 시작 한 사용자 ulimit - n 은 1024 에 불과 하기 때문에 1024 개의 파일 핸들 만 열 수 있 습 니 다. nginx 는 다른 방법 으로 이 제한 을 돌 릴 수 있 습 니 다. 루트 사용자 로 시 작 했 기 때문에 무엇 을 하려 고 하면 안 됩 니까? 그러나 저 는 이 프로그램 은 일반 사용자 입 니 다. 제 프로그램 은 twisted 를 포함 하여 nginx 처럼 우수 하지 않 고 자신 이 모든 것 을 해결 할 수 있 습 니 다.그래서 이 사용자 의 기본 nofile 값 을 수정 하고 늘 려 야 합 니 다!/ etc / security / limits. conf 파일 을 수정 하고 사용자 nofile 에 대응 하 는 값 을 추가 합 니 다. 저 는 65535, 6 만 여 개의 병발 을 설정 합 니 다.사용자 가 서비스 프로그램 을 다시 시작 한 후에 느 린 문제 가 사 라 졌 지만 새로운 문제 가 또 발생 했 습 니 다!1000 여 개가 넘 는 동시 다발 후 제 가 쓴 프로그램 은 주동 적 으로 응답 을 멈 추고 해당 프로 세 스 의 / proc / xxx / fd 디 렉 터 리 의 핸들 수 를 조회 하 며 1000 초 반 의 숫자 에 잠 겨 있 습 니 다. telnet 서비스 포트 에 직접 입력 하면 모든 내용 을 입력 하면 주동 적 으로 연결 을 끊 습 니 다.twisted 프레임 워 크 에 그 인자 가 설정 되 어 있 지 않 은 지 의심 합 니 다. SuggestThread PoolSize 와 같은 문제 가 있 습 니까?찾 고 있 습 니 다. 계속 찾 고 있 습 니 다. 트 위 스 티 드 소스 코드 를 찾 았 습 니 다. 결과 가 없습니다.다 들 그런 문제 없 는 것 같 습 니 다.tisted 커 뮤 니 티 의 메 일 링 리스트 에 편 지 를 보 내 제한 이나 다른 문제 가 있 는 지 물 어보 고 기다 리 는 동안 의 심 스 러 운 마음으로 새로운 python 버 전 을 다시 컴 파일 했 습 니 다.원래 2.4.3 이 었 는데 2.5.4 로 업 데 이 트 된 후에 문제 가 사 라 졌 다!자신 에 게 묻 지 않 을 수 없다. 왜 일 까?곧 커 뮤 니 티 대 협 의 답장 을 받 았 다. 이것 은 python 의 bug 라 고 말 했다. 공교롭게도 2.4.3 이 버 전에 bug 가 있 었 다. 2.4.2 도 없 었 고 2.4.4 도 없 었 다. 나 는 정말 복권 을 사 러 가 야 했다.모든 것 이 지 나 갔 습 니 다. 현재 테스트 는 4000 을 넘 어 연결 을 유지 하고 있 습 니 다. 서버 상태 가 양호 하고 메모리, cpu 의 점용 률 이 높 지 않 습 니 다. 예전 에 실측 cpu 의 점용 률 이 높 은 것 은 thread pool 설정 문제 와 select () 모델 의 종합 적 인 표현 일 수도 있 습 니 다. 현 재 는 모두 사 라 졌 습 니 다. 기본적으로 20% 의 cpu 점용 률 을 유지 하고 python 도 스 크 립 트 언어 입 니 다. 너무 가혹 하 게 요구 하면 안 되 잖 아 요.요약:
  • 성능 은 누 르 고 모든 것 을 의심 하 며 마음껏 누 르 면 병목 점 을 찾 을 수 있 고 항상 해결 하고 향상 시 킬 수 있다
  • 지역사회 의 힘 은 좋 지만 아무 일 도 머리 를 쓰 지 않 고 위로 물 어 볼 수 는 없다. 문 제 를 상세 하 게 묘사 하면 매우 정확 한 대답 을 가 져 올 수 있다
  • 붕괴 직전 에 숨 을 헐 떡 일 수 있 고 기분 을 바 꿀 수 있다. 각 도 를 바 꾸 면 문제 가 해 결 될 수 있 으 니 사소한 일 에 매달 리 지 마라
  • 좋은 웹페이지 즐겨찾기