2014-05-23 6 views
0

나는 수천 개의 PDF 페이지를 생성하는 스크립트를 만들지 만 메모리를 소비하면 서버의 성능에 영향을 미칩니다. 이것은 우선 순위 작업이 아니기 때문에 (이 세대는 웹 서버에 영향을 미치지 않는 한 몇 시간이 걸릴 수 있습니다)이 문제에 대한 최선의 접근 방법은 무엇입니까?PHP 백그라운드에서 무거운 작업

나는 pthread의 일부 구현을 보았지만 ZTS도 설치해야합니다. pthreadPHP

이것이 내 문제에 대한 올바른 접근 방법인지 잘 모릅니다. 감사합니다 모두

답변

2

pcntl 또는 pthread를 설치하지 않으려면 작업을 cron 작업 (파일 잠금을 사용하여 중복 프로세스가 실행되지 않도록)으로 이동하거나 프로세스를 끝내지 않는 서비스로 이동하십시오. 주요 애플리케이션은 PD를 생성하는 데 필요한 메타 데이터를 남기고 서비스는 주 앱과 별도로 실행되며 스로틀 (throttling) 될 수 있습니다.

+0

예, DB에 필요한 메타 데이터를 저장할 수 있지만 그 접근 방법으로 주 웹 서버에 영향을주지 않도록 자원 소비를 어떻게 관리 할 수 ​​있습니까? –

+0

이 서비스 또는 cron 작업은 처음에 한 번에 하나씩 순차적으로 PDF 작성을 처리하기 위해 작성됩니다. 이것은 사용할 수있는 시스템 자원 중 가장 적은 양입니다. 너무 많은 경우 다른 노드에서 처리해야하는 경우가 있습니다. 제 생각에 여러분은 약간의 스케일을 확장하고 n 프로세스를 동시에 실행 시켜서 만들 수 있습니다. – kwolfe

0

다른 옵션은 Gearman을 사용하여 PDF 생성 프로세스를 완전히 별개의 서버 (또는 서버 그룹, gearmand 자체는 실제로 작업 디스패처)에 오프로드 할 수 있습니다. 작업자 스크립트는 PHP를 비롯한 다양한 언어로 작성 될 수 있습니다 (PHP로 작성된 일부 PDF 생성 라이브러리를 이미 사용하고 있다면 여전히 사용할 수 있습니다). 또한 http://gearman.org/

+0

고맙지 만 서버가 동일하면 웹 서버에 영향을 미치지 않도록 메모리 소비를 관리 할 수 ​​있습니까? –

+0

웹 서버를 작업 서버로 설정하고 작업자 서버로 설정할 수도 있습니다. 작업 서버와 작업자 서버는 별도의 프로세스로 실행되지만 동일한 하드웨어 제한 사항을 공유합니다 (메모리가 많이 소요되는 장기간의 프로세스에서 웹 트래픽의 급증으로 인해 문제가 발생하지 않는다고 보장 할 수 없음). 그게 내 추천 이유는 별도의 기계에 compelely 오프로드하는 것입니다. –

+0

그러나 후속 조치로 액세스 할 수있는 프로세스 관리 도구로 개별적으로 해당 프로세스를 관리 할 수 ​​있습니다 –

관련 문제