2013-11-22 2 views
5

그래서 흥미로운 상황이 있으며이를 해결하는 방법을 모르겠습니다.EBS 공유에서 파일을로드하기위한 시간 제한을 설정하십시오.

영업 데이터를 종합적으로 살펴본 다음 Google Chart를 통해 그래프를 작성하는 프로세스가 있습니다. 데이터베이스 (또는 Google과 관련하여)를 망치는 것을 막으려면 30 분마다 실행하면됩니다. 이전 파일을보고 30 분 임계 값에 도달했는지 확인한 후 30 분 임계 값에 도달했는지 확인한 후 새 파일을 작성합니다. 로드 밸런서 뒤에 두 개의 서버가 있습니다. 따라서 두 서버는이 파일을 저장하기 위해 동일한 위치에 액세스해야합니다. 우리는 NFS를 통해 마운트 된 EBS 공유를 사용하여이 작업을 수행했습니다 (전체 설정은 AWS에 있음). 이 과정은 잘 작동합니다.

때때로 EBS 공유가 느리거나 연결이 끊어지는 문제가 있습니다. 이렇게하면 우리의 내부 도구가이 파일 하나 하나를 처리하기를 기다리는 동안 알림을 끄지 않는 한 파급 효과가 발생합니다. 나는 stream_set_timeout에 대해 이야기하는 몇 가지 스레드 (예 : this one)를 읽었지 만 파일을로드하는 데 (정확히 스트림이 아님) 어떻게 사용하는지 명확하지 않으며 어떤 예제도 찾을 수 없었습니다.

여기에 조각 나는이 스크립트에 대한 제한 시간을 만들 수있는 방법을 당신에게 PHP 파일이

$file = '/ebs/path/to/image.png'; 
$newfile=false; 
if(!is_file($file)) $newfile=true; 
elseif(filemtime($file)+1800 < time()) { 
    $newfile=true; 
    unlink($file); 
} 
if(!$newfile){ 
    $i=imagecreatefrompng($file); 
    header('Content-Type: image/png'); 
    header('Expires: ' . gmdate('D, d M Y H:i:s', filemtime($file) + $timeout) . ' GMT'); 
    imagepng($i); 
    imagedestroy($i); 
    exit; 
} else { 
    // Build and output a new file here 
} 

을 무엇을하고 있는지 아이디어를 제공 할 수있어?

+0

근본적인 원인은 "EBS가 느리거나 연결이 끊어졌습니다"입니다. 궁극적 인 해결책은이 문제를 해결하는 것입니다. AWS가 작업에 부합하는지 여부는 또 다른 질문입니다. –

답변

4

이 질문에 대한 답변보다 문제에 대한 해결책이 더 많습니다. 그러나 서버가 정상적으로 작동하고 파일로드가 오래 걸리는 경우 모두 iostat -x 1의 출력을 게시하십시오. avgqu-sz이 30을 초과하면 IOPS 제공 드라이브 (우리 IOPS는 2000 IOPS로 제공됨)에서도 EBS이 느려지 게됩니다. 해결 방법은 상황이 해결 될 때까지 두 번째 또는 세 번째로 읽거나 쓰지 않으려 고 시도하는 것입니다.

또한 볼륨을 복제하고 원래 볼륨 대신 복제본을 사용해보십시오. 일부 AWS 시스템은 '불량'으로 교체해야하는 것으로 나타났습니다. EC2 인스턴스, EBS 볼륨, RDS 서비스 및 기타 서비스에 적용됩니다. 운 좋게도 좋은 이웃이 아닌 다른 사용자와 VM을 실행하는 하드웨어를 사용할 때 발생할 수 있습니다. 리소스를 복제하고 다시 시작하면 대개 다른 하드웨어로 이동하고 이와 같은 문제를 해결합니다.

편집 :iostat가 EBS에 관한 방법에 중점을두고, iostat 출력을 해석하는 방법에 대한 this great post을 읽으십시오. 나는 십여 번 좋은 것을 읽었습니다.

+0

나는 이것을 (매우 유용한 정보이기 때문에) upvoted하고 현상금 (제출 된 유일한 답)으로 주었지만, 언급 한 바와 같이 실제로는 질문에 답하지 않아서 그렇게 표시하지 않았다. 나는 아직도 누군가가'stream_set_timeout'을 설명하는 것을보고 싶다. 그럼에도 불구하고 여기 좋은 정보. – Machavity

관련 문제