[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Грабли с памятью (PHP + Denwer)
forroboform
На Windows 7 64 bit 8Гб оперативки, файла подкачки нет.
На момент запуска скрипта и память и процессор на 90% свободны!.
PHP.INI
memory_limit = 6000M
max_execution_time = 100000
.htaccess
php_value memory_limit 60000M
base.txt = 34Мб в winows-1251 (из UTF-8 перевел, уменьшил в 1.5 раза.

Код:
set_time_limit(0);  
ini_set('memory_limit', ‘600000M’);
$id_base = file('base.txt');
$all = count($id_base);
echo "All:".$all."<br>";
$uniqie = array_unique($id_base);
echo "Unical:".count($uniqie);
$fp = fopen("base_unique.txt", "w") or die ("No open file: base_unique.txt");
foreach($uniqie as $key => $stroka){
$un = $stroka;
fwrite($fp,$un);
}
fclose($fp);


В итоге: All:14847125 Fatal error: Out of memory (allocated 1827667968) (tried to allocate 67108864 bytes)

Откуда?
Ресурсов выделено немерено ...
Думал из за файла подкачки ... включил 10 гб подкачки ( до этого отключал потому что SSD), но ошибка не пропала ...
Подскажите пожалуйста где рыть!
Игорь_Vasinsky
fgets() тебе в помошь

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
forroboform
Когда обрабатывается файл размеров 20 мб скрипт работает!

Не могу понять, почему для PHP выделена куча ресурсов, но при этом мне говорят:
..... 1.8Гб памяти ... и чего то там не хватает ...
Выделено 6Гб и в "INI" и в ".htaccess" и в "самом файле"

Почему не хватает памяти ...?
Игорь_Vasinsky
какая разница скольо выделено) чёж теперь сервак нагибать по максимуму?

читай большие файлы последовательными кусками с fgets()

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
forroboform
Это не сервак, а Денвер ...
Речь о том, что выделено 6Гб, а файл говорит что ему надо для работы всего 1.8ГБ и ему 6Гб не хватает ...

Для PHP 6Гб < 1.8ГБ biggrin.gif
Игорь_Vasinsky
Цитата
Это не сервак, а Денвер

ohmy.gif

новые сборки денвера без апача - уже сегодня..спешите.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
forroboform
Не надо тролить! Все и так понимают, что такое Апач!
Денвер стоит на моей машине, а не сервере хостера!

Вопрос по "нехватке памяти" и непоняткам в связи с этим!
Ибо памяти выделено 6Гб, а PHP пишет, что надо 1.8Гб.
Но PHP все равно "чего то не хватает" ... rolleyes.gif

Хотелось разобраться, какого лешего PHP получил 6Гб, а для обработки файла ему надо 1.8Гб и все равно PHP говорит что ему не хватает памяти ... unsure.gif
Игорь_Vasinsky
Цитата
Не надо тролить!

надо Вася - НАДО!

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kaww
forroboform
, скорее всего у тебя физически нет столько свободной памяти, и тут не важно хоть 100500G в конфиге напиши.
GET
Попробуй memory_limit=-1

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
 set_time_limit (0);


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Invis1ble
для начала я вижу синтаксическую ошибку тут: ini_set('memory_limit', ‘600000M’);
во-вторых, неплохо бы проверить, установилось ли новое значение (читаем мануал ini_set)
в-третьих, после "уникализации" не уничтожается старый массив, хотя далее по коду он не используется, итого оверхед более 2 раз

действуй

PS. $un = $stroka; - это вообще непонятно для чего

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

killer8080
Цитата (forroboform @ 5.06.2013 - 10:28)
Вопрос по "нехватке памяти" и непоняткам в связи с этим!
Ибо памяти выделено 6Гб, а PHP пишет, что надо 1.8Гб.

Где оно выделено?
Цитата (forroboform @ 5.06.2013 - 08:58)
ini_set('memory_limit', ‘600000M’);
600000M - это 600ГБ, а не 6 wink.gif (про синтаксическую ошибку выше уже сказали)
Цитата (forroboform @ 5.06.2013 - 08:58)
.htaccess
php_value memory_limit 60000M

тут уже по скромнее, всего 60ГБ, у тебя там что, денвер на супер компьютере запущен biggrin.gif
forroboform
Хорошо!
Спрошу по другому!
Дайте рецепт для этого:
Папка с 5000 файлами (файл может быть и 2 мб и 2гб.)
Файлы нужно считать, объединить и удалить дубликаты строк.
Сохранить в один файл уникальные строки.


Invis1ble
если предполагаются объемы в 2 ГБ, то наверное стоит написать спец. утилиту на каком-нибудь C, ИМХО.
Ну или в корне пересмотреть логику приложения, т.к. файлы в 2 ГБ как-то не очень

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.