문제

업데이트: 주어진 모든 대답 덕분에 Apache가 아닌 시스템로드에 관한 것입니다.

내 목표는 내 PHP 스크립트 (템플릿 스크립트) 내부에서 Apache가 부하가 높고 LightTPD의 트래픽을 포크 할 수있는 프리가 많은 스크립트 내부에서 이해하는 것입니다.

안녕하세요 여러분, 후 이 질문 나는 Apache와 데이터베이스가 이런 종류의 요청을 for하지 않기 위해 서버에서 긴 정당화 서비스에 Lighttpd를 사용하기 시작했습니다.

그런 다음 LightTPD를 정적 컨텐츠 (이미지, CSS, JS 등)에 사용하기 시작했습니다.

따라서 실제로 Apache가 제공 한 example.com과 glightpd가 제공하는 폴링 .example.com은 memcache를 사용하여 데이터베이스 히트를 줄입니다.

Apache에서는 모든 요청을 example.com/polling/에서 polling.example.com/*로 프록시하기 위해 프록시 모듈을 설정했습니다.

이제 Apache의 부하가 높은 경우 LightTPD에서 다른 AJAX 요청을 리디렉션하기 위해 PHP에서 Apache 서버로드를 검색하는 방법이 있는지 궁금합니다.

내 말은 :

<?php
$apache_server_load = /*hot to retrieve this value?*/;
if($apache_server_load >= $my_defined_max_load){
    $ajax_domain = '/polling';
}else{
    $ajax_domain = '';
}
?>
<script>
    [...]
    $.ajax({
        url: '<?php echo $ajax_domain; ?>/mypage.php',
        [...]
    });
    [...]
</script>

편집하다 데비안에서 실행 중입니다

추신 :이 솔루션이 좋은 접근 방식이 될 수 있는지, 또 다른 질문이 될 것인지 듣고 싶습니다. 원하는 경우 자유롭게 의견을 말하십시오.

도움이 되었습니까?

해결책

보세요 mod_status. 설정 한 후에는 요청하고 구문 분석하고 싶을 것입니다.

http://example.com/server-status?auto

출입하는 모든 단일 요청에 대해 동일한 요청을 다시하지 않고 결과를 적어도 몇 초 동안 캐시하고 싶을 것입니다.

다른 팁

PHP 기능을 사용하여 일반 시스템로드를 찾을 수 있습니다. sys_getloadavg (). 이것은 Apache 또는 LightTPD 서버에 대한 정보를 제공하지 않지만 전체 서버의로드 방식을 개요 할 수 있습니다.

당신은 당신의 시스템에 대해 아무 말도하지 않았습니다. Linux 또는 Unix를 사용하고 있다고 가정합니다. 현재로드를 얻는 가장 좋은 방법은 uptime 일부 상태와 부하 평균을 제공하는 시스템 명령.

이에 대한 정확한 계산은 시스템 의존적이며 "높은 부하"는 시스템에 따라 다릅니다 (코어 수, 응용 프로그램 IO 또는 CPU가 바인딩됩니다 ...).

preg_match("#load average: ([0-9\.]+), ([0-9\.]+), ([0-9\.]+)#", `uptime`, $matches);
print_r($matches);

트릭을 할 수 있습니다.

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