php-fpm/nginx를 통해 이미지 처리를 사용할 때 시스템 부하 감소

php-fpm/nginx를 통해 이미지 처리를 사용할 때 시스템 부하 감소

imagemagic을 기반으로 하는 Code Igniter로 작성된 PHP 이미지 API가 있습니다. nginx/php-fpm 뒤에 API가 있습니다. Imagemagic 부분이 무겁다는 것을 알고 있지만 전체 처리량을 점점 더 높이려고 노력하고 있습니다.

우리는 Nginx에 관한 30개 이상의 최적화 기사를 검토했습니다. 대부분 기사를 따르고 TCP 최적화를 수행하여 분당 300개 요청에서 분당 350개 요청으로 출력을 늘릴 수 있었습니다.

이로 인해 서버 로드 시간에 심각한 영향을 미쳤습니다. 이것은 새로운 상자이고 Nginx 기반이기 때문에 제가 말씀드릴 수 있는 평균 로드는 없습니다. 과거 Apache 작업자(분당 300개 미만 요청)가 있었습니다. 이제 350req/m의 AVG 로드는 20입니다. 이는 너무 많은 수치이므로 개선을 모색하고 있습니다.

프로세스를 조사하기 위해 htop을 사용할 때 일반적으로 16개 CPU 모두를 과도하게 사용하는 약 20개의 php-fpm 프로세스를 볼 수 있으며 메모리는 24GB 중 2GB 정도입니다.

우리는 시스템 부하를 대폭 줄이는 것을 목표로 하고 있습니다. 숙련된 사용자들이 어디를 보고, 무엇을 시도해야 하는지에 대한 지식을 공유하고 싶습니다. 귀하가 요청하는 번호는 무엇이든 게시할 예정이지만 처음에는 그 내용으로 게시물을 가득 채우고 싶지 않았습니다.

시스템 부하를 줄이면서 처리량을 유지하려면 어떻게 해야 합니까?

답변1

이것이 순수한 CPU 낭비 문제(iowait 없음)라는 것을 확인했기 때문에 더 많은 리소스를 추가하지 않고는 동일한 처리량을 유지할 수 있는 방법이 없습니다. 최대 PHP 프로세스 수를 줄이거나 CPU 코어를 더 추가하세요.

아니면 개발자에게 ImageMagick이 아닌 다른 것을 사용하도록 요청하세요.

답변2

요청이 반복되는 경우 fastcgi 캐시(http://wiki.nginx.org/HttpFastcgiModule) 또는 nginx 앞에 바니시를 사용하십시오.

이렇게 하면 처리된 이미지를 캐시할 수 있으며 과도한 CPU 프로세스를 다시 수행할 필요가 없습니다.

답변3

귀하의 질문에 PHP-FPM 프로세스가 TOP CPU에 있다고 나와 있으므로 ImageMagick PHP 라이브러리(http://php.net/imagick).

ImageMagick 바이너리(예: /usr/bin/[비교, 가져오기, 표시 ...])를 통해 이미지 처리가 직접 수행되는 시나리오를 개발자에게 테스트해 달라고 요청하세요.

바이너리를 직접 사용하면 작동하는 경우 PHP 함수 exec()를 사용하고 ImageMagick 바이너리에 대한 호출을 캡슐화하고 CPU 및 기간 측면에서 어떻게 진행되는지 확인하세요.

@추가 정보:https://stackoverflow.com/questions/4323672/how-do-i-get-imagemagick-installed

답변4

개발자 방식

  1. 이미지 처리를 위한 PHP 오버헤드를 줄이십시오.
  2. 이미지 처리에 더 적은 리소스를 사용하십시오. 준비된 이미지를 사용하거나 더 적은 성능 요구 사항으로 일부 작업을 변경하세요.

관리 방법

  1. 더 강력한 CPU를 사용하세요

관련 정보