2012-06-20 3 views
0

가끔씩 메모리가 부족하여 (프로세스가 종료되어) 비정상적으로 종료되는 PHP 스크립트가 있습니다. PHP가 종료 될 때 "정리"작업을 실행할 수있는 기능이 있는지 알고 싶습니다. "shutdown handlers"를 시도했지만 호출되지 않은 것 같습니다.PHP 스크립트의 정상 종료 및 비정상 종료

사용할 수있는 "신호 처리기"또는 "종료 콜백"같은 것이 있습니까? 스크립트가 종료 될 때 (정상적으로 또는 비정상적으로) 몇 가지 작업을 수행하는 함수를 호출하려고합니다.

+0

liam-이 명령 줄 PHP 또는 웹 응용 프로그램의 일부로 실행인가? 어떤 종류의 프레임 워크 또는 라이브러리에 PHP 코드가 있습니까? – Liam

+0

데이터베이스의 항목 (이 스크립트가 실행되는 빈도가 확실하지 않음)이 시작되었고 스크립트의 끝에서 삭제되었다고 생각하십니까? 테이블의 행을보고 완료하지 못한 모든 스크립트를 매우 쉽게 볼 수 있습니다. – Fluffeh

+0

도움이 될만한 내용 - http://php.net/manual/en/function.pcntl-signal.php –

답변

0

PHP에는 원하는대로 작동하는 정리 기능이 없습니다. 할 수있는 일은 메모리를 다 써 버리지 않고 필요한 작업을 완료하기 위해 최선의 최적화 방법을 확인하기 위해 코드를 살펴 보는 것입니다.

PHP에는 memory_get_usage이라는 PHP에 할당 된 현재 메모리 양을 가져올 수있는 기능이 내장되어 있습니다. 이를 통해 PHP가 현재 사용하고있는 메모리 양을 확인하고 파일을 php.ini 파일 내에 할당 된 메모리 양과 비교할 수 있습니다. 당신이 이것에 가까이 올 때, 당신은이 스레드가 중단 된 다른 스레드에서 물러나거나 픽업 할 수 있습니다.

  • 이 양을 증가 :

    다음은 PHP를 조정할 할도 가능성이 일부있는 당신은 아마 이미 알고 있지만, 일부 메모리를 절약 할 수있는 몇 가지 내가 같은 문제가 있다면 내가 볼 것 무엇인가이다 가능한 경우 php.ini 파일 내의 메모리를 사용하거나 ini_set을 사용하여 PHP의 메모리 크기를 늘리십시오. 만약 메모리의 양을 높이면 일시적인 문제점이/할당 해제 변수를 제거하고 PHP가 사용하는 일부 메모리 복원 바와 같이 unset 기능

  • 화장 용으로 해결할 수있다
  • 재사용 변수 가능한,이 캡슐 포함 재사용 가능한 메서드/함수 내에서 코드 작성 및 for/foreach/for..in 루프 사용하기
  • 오랜 기간 동안 큰 데이터 (텍스트 또는 바이너리)를 메모리에 저장하지 마십시오.
  • 메모리 오프로드 서비스 작성 또는 프로세서 집약적 인 작업 때문에 메인 코드 실행 시간 초과가 발생하지 않습니다.
  • 대기열을 사용하여 ' 필요한 모든 것을 처리하기 위해 하나의 스레드 또는 스크립트의 제한 시간에 바인딩되지 않습니다. 아마도 rabbitMQ 또는 다른 패키지가 작동 것이다위한

PHP는 많은 양의 데이터 및 변환을 많이 처리 할 수 ​​있어야합니다,하지만 당신은 효율성을 얻기 위해 할 수있는 일이 바로 그 길을 따라 도움이 될 것입니다. 이 도움이

희망,

관련 문제