문제

내가 알고있는 질문 제목이 최고 되지 않습니다.설명드리겠습니다.

나는 톤의 텍스트 처리를 변환하는 자연적인 언어를 xml.이러한 텍스트 파일 업로드 상당히 빠른 속에 던져 있습니다.거기에서 그들이 뽑아 하나씩을 배경으로 작업자를 호출하는 우리의 파서(사용하여 부스트령)을 변환하는 텍스트는 xml 고 부하의 관련 부분으로 우리의 db.

파서를 할 수 약 100 이다.나는 평가-리미터를 배경에 노동자만 투표는 우리의 큐 매주는 지금도 그것을 실행하지 않으로 빠르다.I 던질 수 없는 하나 이상의 배경은 노동자 때문에 지금 내는 http 요청 시작을 드롭--배경을 작업자 및 웹 서버에 존재하는 같은 기계 및 나 믿 그것 때문에 cpu 사용량을 타격 80-95%,하지만 우리가 할 수 ram 을 더 많이 사용합니다.

가 필요하다 더 낫습니다.어떻게 당신에 대해 그것을 하고 있는가?

에서 몇 가지 질문에 대한 답변:

  • 우리가 사용하는 아마존 웹 서비스를 구입하 저렴한 추가 하드웨어에는 조금 다른 산란에서 새로운 amazon 인스턴스--아마 누군가가 수행하는 코드는 autospawns 경우에 부하의 양?

  • 우리가 http server 는 물건의 파일로 큐 그래서 유일한 이유로 그것이 영향을 받기 때문입 cpu 는 바쁜 다루는 톤의 구문 분석된 이유가 있습니다.

  • 이미 평가-제한이 우리의 배경은 노동자,비록 우리를 이용하지 않는 파서 자신

  • 내가 시도하지 않은 멋진하지만 아직 내가 사용했던 그것은 과거에-난 필요가 적어 일부 벤치마크에 있는

  • 파서 완전히 분리되는 웹 서버에서 우리는 nginx/merb 으로 우리의 웹/응용 프로그램 서버 및 레이크 작업을 호출하면 c++같이 우리의 배경은 노동자--아직 그들은 존재에서 동일한 기계

도움이 되었습니까?

해결책

저렴한 컴퓨터 몇 개를 사서 텍스트 처리를 할 것입니다. Jeff가 그의 말처럼 최신 우편물, "항상 노력하십시오 먼저 성능 문제에서 벗어나십시오 더 빠른 하드웨어를 던져서. "

다른 팁

아마도 그냥 두 배경을 작업자에게 낮은 우선 순위 스케줄링(예:용 도)도움이됩니다.즉,서버가 요청을 처리할 때 필요하지만,때 그것은 바쁜 당신이 갈 수 있는 풀블래스트와 텍스트를 처리합니다.

상을 줄 것이다 당신은 훨씬 더 많은 이익보다 엄청난 배경을 작업자 임의로.

나는 당신의 질문을 정확하게 따르고 있는지 확실하지 않지만, 당신은 대기열이 대기중인 작업을 공급하는 HTTP 엔진을 가지고있는 것처럼 들립니다. 옳은? 배경 스레드가 해당 대기열 요청을 수행하고 무거운 리프팅 부분을 수행하고 있습니까?

따라서 백그라운드 프로세스가 계산 된 것처럼 들리고 전경 프로세스는 본질적으로 I/O 바운드입니다. 또는 새로운 작업을 제출할 수있는 비율로 최소한으로 제한됩니다.

이러한 프로세스를 최적화하는 가장 좋은 방법은 백그라운드 프로세스를 전경 프로세스보다 우선 순위로 낮추는 것입니다. 이를 통해 백그라운드 프로세스에 작업을 수행 할 수 있습니다. 그런 다음 프로세스 사이의 대기열 깊이를 설정하여 크기가 한 번에 보류중인 최대 작업량으로 제한되도록합니다.

한 했어 있는 경우,이용,이동하는 것입한 이러한 구문 분석 서비스는 클라우드 호스팅 서비스입니다.

나는 너의 나의 분산 서비스(검색 엔진,질량,이메일 오류 로그)을 클라우드 컴퓨팅 서비스의 기본기와의 환상적인 짐 우리 주 웹 서버에 있습니다.

Plus 클라우드 컴퓨팅은 더 싸게 사용할 수 있고 크게.

CPU가 100%인 것에 대해 왜 걱정하는지 이해가 안 돼요. 직무가 필요하고 IO 묶이지 않으면 CPU ~해야 한다 100%입니다.

남아있는 것은 :

  • 사용 가능한 시간에 필요한 모든 작업을 수행하기에 충분한 CPU가 있습니까?

그렇지 않은 경우 더 많은 기계, 더 빠른 CPU 또는 CPU 효율적인 알고리즘이 필요합니다. 처음 두 옵션은 아마도 기업의 규모에 따라 세 번째 옵션보다 저렴할 것입니다!

  • 다른 것보다 더 반응이 필요한 직업이 있습니까?

거기있는 것처럼 들립니다. HTTP 서버가 반응을 보이기를 원하는 것처럼 들리지만, 파서 작업은 자체 속도로 완료 할 수 있습니다 (대기열이 채워진 것보다 빨리 비워지는 한). 다른 사람들이 지적했듯이, Nice는 우선 순위가 높은 프로세스가 필요한 것을 취한 후 CPU 사이클이 '남은'우선 순위가 낮은 프로세스를 할당하라고 OS에 알려줍니다 (흑백은 아니지만).

나는 당신이 두 그룹 중 하나에 속하는 여러 스레드가 있다고 가정합니다.

  • 텍스트 파일을 다운로드하는 그룹 A
  • 텍스트를 XML로 변환하는 그룹 B

그룹 B가 처리량을 제한하고 있다고 생각되면 스레드를 우선 순위를 낮추도록 설정합니다. 충분한 작업이 있으면 CPU는 여전히 100% 사용되지만 다운로드는 영향을받지 않습니다.

위의 가정이 올바른 경우, 성능이 더 많은 CPU와 함께 확장되어야하므로 멀티 코어 및 멀티 CPU 기계를 사용해야합니다.

인터럽트 요청을 서비스하는 데 어려움이있는 경우 CPU 바운드 작업의 냉담함을 높일 수 있습니다. 그런 다음 HTTP 서버의 냉담함을 낮추십시오. 기본적으로 시스템 스케줄러를 유리하게 사용하고 모든 작업을 동일하게 처리하지 마십시오.

나는 당신이 어떤 OS를 사용하고 있는지 모르지만 대부분의 OS는 스레드/프로세스의 우선 순위를 지정하는 기능을 가지고 있습니다. 파서 프로세스가 HTTP 프로세스보다 우선 순위가 낮은 한 ~해야 한다 괜찮습니다.

파서를 자체 기계에 넣었습니다. 그렇게하면 웹 서버에 영향을 미치지 않습니다.

다른 기계에 대한 예산이없는 경우 가상화를 사용합니다 (OpenVZ 파서의 CPU 할당량을 제한하기 위해 웹 서버가 Ubuntu 또는 Centos에서 호스팅되면 멋지다.

전력 요금 / 호스팅 가격을 잊지 마십시오. 코드에서 프로파일 러 찾기 병목 현상을 시도하십시오. 그렇게 한 적이 없다면 CPU 소비를 25-50%로 줄일 수 있다고 확신합니다.

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