Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 웹하드순위
- Regex
- JSON
- OOP
- composer-php
- post
- Ajax
- jquery
- HTML
- Linux
- UTF-8
- curl
- Session
- Arrays
- MySQL
- php
- file-upload
- JavaScript
- date
- variables
- Laravel
- Forms
- 전략
- 웹하드추천
- 경영
- 무료다운로드쿠폰
- Apache
- function
- string
Archives
- Today
- Total
개발! 딱 깔끔하고 센스있게!
왜 이 간단한 php 스크립트가 메모리를 누출합니까? 본문
앞으로 php 프로그램 (drupal 모듈) 에 메모리 유출을 피하기 위해 간단한 php 스크립트를 사용하여 메모리를 누설하고 있습니다.
php 전문가가 이 스크립트를 통해 메모리 사용량이 계속 오르는 원인을 찾아낼 수 있습니까?
자신의 운영을 시도해 각종 인자를 바꾸어 보자.결과가 매우 재미있다.
여기는:
{"member_" . $i} = array("blah blah blha" => 12345); $object->{"membersonly_" . $i} = new StdClass; $object->{"onlymember"} = array("blah blah blha" => 12345); } unset($object); } function waste_a_little_less_memory($iters) { $i = 0; $object = new StdClass; for (;$i < $iters; $i++) { $object->{"member_" . $i} = array("blah blah blha" => 12345); $object->{"membersonly_" . $i} = new StdClass; $object->{"onlymember"} = array("blah blah blha" => 12345); unset($object->{"membersonly_". $i}); unset($object->{"member_" . $i}); unset($object->{"onlymember"}); } unset($object); } memstat(); waste_a_little_less_memory(1000000); memstat(); waste_lots_of_memory(10000); memstat();
나에게 수출은:
current memory usage: 73308 current memory usage: 74996 current memory usage: 506676
[편집은 더 많은 멤버 설치 취소!]
대답
unset() 변수 사용 메모리를 풀 수 없습니다.
‘쓰레기 수집기’(5.3.0 버전 이전에 PHP 는 진정한 쓰레기 수집기가 없었을 뿐 원어에 쓰이는 무메모리 일정)이 적합하다고 생각할 때 메모리가 석방됐다.
또 기술적으로는 unset(), object 변수가 함수의 역할에 한정되지 않기 때문이다.
여기에는 각본이 다른 것을 보여 준다.
나는 memstat () 함수를 수정하였습니다.
{"member_" . $i}= array("blah blah blha" => 12345); $object->{"membersonly_" . $i}= new StdClass; $object->{"onlymember"}= array("blah blah blha" => 12345); } } function object_parent_unset($iters) { $i = 0; $object = new StdClass; for (;$i < $iters; $i++) { $object->{"member_" . $i}= array("blah blah blha" => 12345); $object->{"membersonly_" . $i}= new StdClass; $object->{"onlymember"}= array("blah blah blha" => 12345); } unset ($object); } function object_item_unset($iters) { $i = 0; $object = new StdClass; for (;$i < $iters; $i++) { $object->{"member_" . $i}= array("blah blah blha" => 12345); $object->{"membersonly_" . $i}= new StdClass; $object->{"onlymember"}= array("blah blah blha" => 12345); unset ($object->{"membersonly_" . $i}); unset ($object->{"member_" . $i}); unset ($object->{"onlymember"}); } unset ($object); } function array_no_unset($iters) { $i = 0; $object = array(); for (;$i < $iters; $i++) { $object["member_" . $i] = array("blah blah blha" => 12345); $object["membersonly_" . $i] = new StdClass; $object["onlymember"] = array("blah blah blha" => 12345); } } function array_parent_unset($iters) { $i = 0; $object = array(); for (;$i < $iters; $i++) { $object["member_" . $i] = array("blah blah blha" => 12345); $object["membersonly_" . $i] = new StdClass; $object["onlymember"] = array("blah blah blha" => 12345); } unset ($object); } function array_item_unset($iters) { $i = 0; $object = array(); for (;$i < $iters; $i++) { $object["member_" . $i] = array("blah blah blha" => 12345); $object["membersonly_" . $i] = new StdClass; $object["onlymember"] = array("blah blah blha" => 12345); unset ($object["membersonly_" . $i]); unset ($object["member_" . $i]); unset ($object["onlymember"]); } unset ($object); } $iterations = 100000; memdiff(); // Get initial memory usage object_item_unset ($iterations); memdiff(); object_parent_unset ($iterations); memdiff(); object_no_unset ($iterations); memdiff(); array_item_unset ($iterations); memdiff(); array_parent_unset ($iterations); memdiff(); array_no_unset ($iterations); memdiff(); ?>
사용 대상이 된다면 이러한 종류가 unset(), unset()을 허용하여 자원을 삭제할 수 있도록 확인하십시오.가변구조류를 최대한 사용하지 않기 (예를 들어 stdclass) 이나 클래스에 분배할 때 존재하지 않는 멤버는 이 멤버들의 메모리에 배당되지 않기 때문이다.
PHP 5.3.0과 더 높은 버전은 더 좋은 쓰레기수집기가 있지만 기본적으로 사용되지 않습니다.
사용하려면 gcu enable () 한 번 호출해야 합니다.
'개발 스크랩 메모 > PHP' 카테고리의 다른 글
Visual Studio PHP (0) | 2020.12.26 |
---|---|
PHP:mbustrtouppper가 일을 하지 않습니다. (0) | 2020.12.26 |
굉장히 긴 시간 Php 스크립트 Cron 작업이 필요합니다. (0) | 2020.12.26 |
php 에서 xamp을 사용하여 메일을 보내기 (0) | 2020.12.26 |
for 순환에서 PHP 하위 메뉴 만들기? (0) | 2020.12.26 |
Comments