Я запускаю свой PHP-скрипт, и ему нужно explode
большой файл .txt (около 1 ГБ), но он каждый раз терпит неудачу с сообщением об ошибке Out of memory
.
Out of memory (allocated 1168297984) (tried to allocate 268435464 bytes)
Я попытался изменить свой php.ini на 2048M, а также попытался добавить ini_set('memory_limit','2048M');
в свой скрипт, но это все еще происходит. Кроме того, я не использую Apache или какой-либо другой сервер, PHP используется только для обработки файлов.
print("Starting: ". ini_get("memory_limit")."\n");
$usage = memory_get_usage()/1000000;
print("Usage: ".$usage."\n");
Когда я пытаюсь отладить использование памяти, я получаю вот это.
Starting: 2048M
Usage: 693.059752
mmap() failed: [12] Cannot allocate memory
mmap() failed: [12] Cannot allocate memory
PHP Fatal error: Out of memory (allocated 1168297984) (tried to allocate 268435464 bytes)
Кроме того, в системе имеется более 1 ГБ свободной памяти.
htop
и командаfree
, помогут вам выяснить, так ли это. - person SeinopSys   schedule 10.12.2018ini_set
не является гарантией, проверьте его ответ, чтобы убедиться, что вы увеличили лимит. Но, честно говоря, ваша проблема заключается в вашей идее прочитать весь файл с одного выстрела. Дружище, сделай цикл и прочитай файл шаг за шагом. Это совсем не сложно. - person user1597430   schedule 10.12.2018php -i | grep -i memory_limit
. Это дает вам текущий memory_limit. Настройки для CLI и WEB могут отличаться, поэтому я предлагаю эту командную строку. Как только вы убедитесь, что в php env установлен правильный memory_limit, посмотрите наfree -m
, который даст вам, сколько памяти в настоящее время доступно для вашей системы. Эти команды применимы для ОС на базе Linux. - person Nikola Petkanski   schedule 10.12.2018