특정 PHP 스크립트에 허용 된 메모리를 늘리려고합니다. 아무리 내가 뭘, 예를이를 위해 :PHP는 300MB의 RAM을 사용할 수 없습니다.
ini_set('memory_limit', '512M');
... 스크립트는 항상 300메가바이트 주위에 메모리가 부족하지 :
내가 여러 검증 한Fatal error: Out of memory (allocated 25165824) (tried to allocate 343810589 bytes) in \\Foo\phpQuery\phpQuery.php on line 255
가 memory_limit
가 실제로 변경되는 것을 의미 . 이 문제는 PHP가 물리적으로MB의 메모리를 할당 할 수 없다는 것을 나타냅니다 (25165824 바이트 + 343810589 바이트 = 352 MB).
나는 해봤 모두 다음과 같은 사양과 PHP/5.3.0 및 두 개의 서로 다른 Windows 기반 컴퓨터에서 PHP/5.3.9 :
윈도우 XP/Windows Server 2003의- (두 컴퓨터가 32 비트입니다 1GB 이상 RAM)와 비트 박스는
- 공식 PHP 32 비트 VC9 바이너리 내가 이해 아파치 2.2 모듈 (타사 32 비트 VC9 바이너리)
로 실행하는 물리적 RAM의 사용 반 스와를 강요 할 것이다. pping 및 느린 것들을 지옥으로 느리게하지만 난 단지 스크립트가 실제로 작동하는지 확인해야하므로 라이브 서버에 배포 할 수 있습니다. 나는 또한 더 큰 값 (동일한 오류를 procuded)과 더 작은 값 (나의 스크립트가 한계에 부딪치게 만들거나 Apache 충돌을 만들었다)을 시도했다.
이 하드 코드 된 메모리 제한의 출처는 무엇입니까?
업데이트 # 1 : Windows Server 2003 상자 (실제로는 VMWare 가상 컴퓨터)를 사용하여 테스트를 추가했습니다. "실제"RAM을 2 GB로 늘렸고 페이징 파일이 1152 MB까지 자랄 수 있음을 확인했습니다. 작업 관리자는 현재 트랜잭션로드가 886 MB이고 사용 가능한 실제 메모리가 1,5 GB임을 보여줍니다. 그러나 정확히 같은 숫자 과 동일한 오류가 발생합니다.
업데이트 # 2 : 앞서 말했듯이 memory_limit
지시문은 적합합니다. ini_get()
및 phpinfo()
모두에 표시됩니다. 얻을 수있는 오류 메시지는 내 것과 약간 다릅니다. 광산은 PHP 의 충돌을 나타냅니다. 다음을 비교하십시오 :
Out of memory (allocated 25165824) (tried to allocate 343810589 bytes)
Allowed memory size of 25165824 bytes exhausted (tried to allocate 343810589 bytes)
나는이 문제를 재현하고보고하기 위해 스크립트를 작성하려고합니다.
PHP가 한 번에 많은 메모리를 차지하려고하는 경우 파일을로드하려고한다고 가정합니다. 한 파일이 아닌 여러 파일로로드하려고 시도하십시오. –
«최적화 할 수없는 경우 , 더 많은 RAM을 구입 ...»글쎄, 언젠가 틀렸어 ...;) 그 모든 기억이 필요하신가요? 300MB는 이미 엄청난 양입니다. 어쩌면 당신은 당신의 스크립트를 조금 최적화 할 수 있습니다 ... – Macmade
OS에 할당 할 300MB 이상의 여유 메모리가 100 % 확실합니까? – DaveRandom