PHP Proc_nice는 새로운 우선 순위 설정에서 아파치 스레드를 남겨 두나요?

StackOverflow https://stackoverflow.com/questions/1849421

문제

Proc_nice ()를 실행할 때 실제로 Apache의 스레드가 좋은가요?

그렇다면 현재 사용자 (비수기가 아닌 사용자)가 원래 우선 순위로 Renice가 Apache 2.0X 서버에서 Apache 스레드 (APACHE_CHILD_TREMINATE)를 멸망시킬 수없는 경우?

문제는 사용자가 Ad-Hack 쿼리를 실행할 수있는 앱의 영향을 제한하려고한다는 것입니다. 쿼리는 방대 할 수 있으며 결과적으로 데이터의 변환에는 많은 메모리와 CPU가 필요합니다.

이미 메모리 소비에 도움이되는 프로세스를 더 스트림 기반으로 다시 작성했지만 프로세스가 최우선 순위를 낮추기를 원합니다. 그러나이 상자에 우선 순위가 높은 웹 서비스가 많이 실행되므로 Apache 스레드를 최우선 순위로 남겨 둘 수 없습니다.

티아

도움이 되었습니까?

해결책

그러한 상황에서, 해결책은 종종 아파치 프로세스 내에서 그런 종류의 무거운 작업을 수행하지 않으면 :

  • 같은 것을 사용하여 외부 PHP 프로세스를 실행하십시오 shell_exec, 예를 들어 - 동기 모드에서 작업 해야하는 경우 (예 : 몇 분 후에 작업을 실행할 수없는 경우)
  • 작업을 FIFO 시스템으로 푸시하고 "작업이 곧 처리 될 것"이라는 메시지를 사용자에게 즉시 반환합니다.
    • 다른 과정이 있습니다 (예 : 매 순간마다 Crontab을 통해 출시) FIFO 대기열을 확인하십시오
    • 그리고 그것을 처리하는 것은 대기열에 무언가가 있습니다.
    • 그 과정 자체는 우선 순위가 낮은 모드에서 실행될 수 있습니다.


가능한 한 자주, 특히 무거운 계산에 시간이 걸리면 두 번째 해결책을 찾을 것입니다.

  • 사용자는 즉시 피드백을받을 수 있습니다. "서버는 귀하의 요청을 받았으며 곧 처리 할 것입니다."
  • 그것은 Apaches의 프로세스를 오랫동안 "작동"하지 않습니다 : 무거운 물건은 다른 프로세스에 의해 수행됩니다.
  • 언젠가 하나의 서버가 더 이상 충분하지 않은 양의 처리 능력이 필요한 경우, 이러한 종류의 시스템은 스케일을 더 쉽게 확장 할 수 있습니다. 동일한 FIFO 대기열에서 선택할 두 번째 서버를 추가하십시오.
  • 서버가 실제로 너무로드 된 경우 적어도 한동안 큐에서 처리를 중지 할 수 있으므로 부하가 더 좋아질 수 있습니다. 예를 들어, 중요한 웹 서비스가 구체적으로 많이 사용되면 유용 할 수 있습니다. 타임 프레임.


또 다른 (멋지게 보이지만 아직 시도하지 않았습니다) 해결책은 예를 들어,와 같은 일종의 도구를 사용하는 것입니다. 기어맨 :

Gearman은 일반적인 응용 프로그램 프레임 워크를 제공하여 작업을 수행하는 데 더 적합한 다른 기계 나 프로세스에 작업을 시작합니다.
이를 통해 병렬로 작업하고 균형 처리를로드하고 언어 간 기능을 호출 할 수 있습니다.
고 가용성 웹 사이트에서 데이터베이스 복제 이벤트 전송에 이르기까지 다양한 응용 프로그램에서 사용할 수 있습니다.
다시 말해, 분산 가공이 어떻게 전달되는지는 신경계입니다.

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