php5.2.0의 메모리 관리가 크게 개선되었으며 어떤 경우에는 메모리가 해제되지 않는 문제가 더 이상 존재하지 않습니다.
php 스크립트(mem.php)를 테스트하기 위해 echo N>> 및 sleep을 사용하여 스크립트가 특정 단계에서 일시 중지되어 상태를 감지하도록 제어합니다.
코드 복사 코드는 다음과 같습니다.
echo '1>>';
sleep(5);
$o = array();
for ($i=0;$i<=100000;$i ) {
$o[]='aaaaaaaaaaaaaaaaaaa';
}
echo '2>>';
unset($o)
echo '3>>'; {
echo '..';
sleep(10);
}
?>
메모리 사용량을 모니터링하는 Bash 스크립트(참고: 내부의 "mem"이 사용됨) 위의 PHP 스크립트 이름에서):
while true;doclear;ps au|grep -v "(vi|grep)"|grep "(mem|RSS)";sleep 2;done
다음은 $/ usr/local/bin/php mem.php는 PHP 5.1.6 및 5.2.0을 사용하는 세 가지 상태(배열 생성 전, 배열 생성 후, 배열 파괴 후)의 프로세스입니다(동일한 구성 매개변수를 사용했습니다) RSS (메모리 사용량 값, 단위 KB) 테스트 결과입니다.
php5.1.6:
3164
18076
17572
PHP5.2.0:
4088
14400
4424
버전 5.1.6 이후를 볼 수 있습니다. 배열을 설정 해제하면 메모리가 프로세스에서 해제되지 않습니다. PHP 프로세스에서는 계속해서 재사용할 수 있지만 시스템의 다른 프로세스에서는 사용할 수 없습니다. 그리고 5.2.0은 실제로 메모리를 확보합니다.
처음에는 5.2.0의 메모리 사용량이 5.1.6보다 몇 kb 더 많았다는 것을 알 수 있습니다. 이는 5.2.0에 몇 가지 새로운 사항이 추가되었기 때문이며 이는 정상적인 현상입니다.
또한, php5.2.0의 메모리 할당도 크게 개선되었습니다. 공식적으로는 emalloc()이 호출될 때마다 memory_limit 감지가 요청된 메모리 데이터 블록(블록)을 직접 감지하도록 변경된다는 것입니다. 시스템. 더 많은 것을 알고 싶은 친구들은 코드를 직접 공부할 수 있습니다. 메모리 할당 구현 변경으로 인해 memory_limit에서 메모리 제어를 보다 정확하게 제어할 수 있습니다. 즉, 이전 PHP 코드에서는 오류 없이 memory_limit를 초과하는 메모리 사용량이 있는 경우 PHP5.2.0 보고서에 있을 수 있습니다. 오류. 이러한 개선 사항의 균형을 맞추기 위해 PHP5.2.0의 기본 memory_limit가 이전 8MB에서 16MB로 변경되었습니다. 소스 코드를 검색하면 이 수정 사항을 확인할 수 있습니다(find . -name *c -type f |xargs cat |grep memory_limit).
이상에서는 thinkpad e520의 내용을 포함하여 thinkpad e520 php520의 메모리 관리 개선 사항을 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.