2012-12-12 5 views
3

내 서버에서 말한다 나는 다음과 같은 오류가 있습니다허용 메모리 크기를 소진하지만 memory_get_peak_usage 그렇지 않으면

이 루프 (foreach는 하나) 내가 루프에서 메모리 사용에 체크하고있어에서 발생

Allowed memory size of 268435456 bytes exhausted

내가 7254128를 얻을

memory_get_peak_usage(); 

가 배출되는 268435456에서 멀리이다!

여러 곳에서 확인했는데 메모리 사용량이 격렬하게 늘어나지 않아서 문제가 어디 있는지 정말로 알 수 없습니다!

내가 여기

코드가 문제를 일으키는 내 php.ini 파일 만 16M에 메모리 제한을 살고 있고 어디 동일한 스크립트 내 로컬 컴퓨터에서 잘 작동하고,하지만 난 정말 유용하지 않을 것이라고 생각 그것은 question2answer 오픈 소스가 플랫폼의 플러그인에서이다 :

foreach ($badges as $slug => $info) { 
    $badge_name=qa_badge_name($slug); 
    if(!qa_opt('badge_'.$slug.'_name')) 
      qa_opt('badge_'.$slug.'_name',$badge_name); 
    $name = qa_opt('badge_'.$slug.'_name'); 
} 
+0

그래서 ....'qa_opt' 또는'qa_badge_slug'에서 재귀 적으로 실패했을 가능성이 있습니까? – Wrikken

+0

나는 그것을 포스트에 넣었지만, 유용하다고는 생각지 않는다. 플러그인에서 왔기 때문에 구문이 특별하다. 그리고 코드가 깨끗하지 않다는 것을 알고 있습니다. 그 코드는 작동하지 않습니다. – darkheir

+0

@Wrekken 그것은 foreach 중에 발생할 수 있습니까? 루프의 첫 번째 회전은 잘 수행되지만 두 번째 회전에서는 오류가 발생하기 때문입니다. 그리고 내 로컬 컴퓨터에서 작동 중입니다. 이로 인해 이상한 점이 추가되었습니다! – darkheir

답변

1

나는 강력하게 문제 때문에 표준 MySQL의 커넥터 라이브러리의 '잘못 기능'에있을 것입니다 생각한다. '긴 BLOB'또는 '긴 텍스트'필드를 포함하는 행을 데이터베이스에서 가져올 때. 데이터에 필요한 정확한 크기를 할당하는 대신 MySQL 라이브러리는 행을 저장하는 데 필요할 수있는 가장 큰 크기를 할당하려고합니다. 즉 4 기가 바이트의 메모리를 갖는다.

이 문제를 해결하는 가장 쉬운 방법은이 '기능'

PHP massive memory usage for SQL query

올바른 Allowed memory size of 67108864 bytes exhausted

I'm checking the memory usage in the loop with memory_get_peak_usage(); I obtain 7254128 which is far from the 268435456 exhausted!

이없는 MySQL의 ND 커넥터를 사용하도록 전환하는 것입니다. 메모리 할당이 실패하여 최대 메모리 사용량이 사용중인 거대한 할당을 보여주지 않습니다.

btw 오류 메시지를 실패한 메모리 할당 오류를 생성하는 정확한 코드 줄로 추적 할 수 있어야합니다. SQL 가져 오기에서 시작하지 않은 경우 대답이 잘못되었을 수 있습니다.

관련 문제