forroboform
5.06.2013 - 09:58
На Windows 7 64 bit 8Гб оперативки, файла подкачки нет.
На момент запуска скрипта и память и процессор на 90% свободны!.
PHP.INImemory_limit = 6000M
max_execution_time = 100000
.htaccessphp_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
5.06.2013 - 10:21
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
5.06.2013 - 10:27
Когда обрабатывается файл размеров 20 мб скрипт работает!
Не могу понять, почему для PHP выделена куча ресурсов, но при этом мне говорят:
..... 1.8Гб памяти ... и чего то там не хватает ...
Выделено 6Гб и в "INI" и в ".htaccess" и в "самом файле"
Почему не хватает памяти ...?
Игорь_Vasinsky
5.06.2013 - 10:32
какая разница скольо выделено) чёж теперь сервак нагибать по максимуму?
читай большие файлы последовательными кусками с 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
5.06.2013 - 10:58
Это не сервак, а Денвер ...
Речь о том, что выделено 6Гб, а файл говорит что ему надо для работы всего 1.8ГБ и ему 6Гб не хватает ...
Для PHP 6Гб < 1.8ГБ
Игорь_Vasinsky
5.06.2013 - 11:01
Цитата |
Это не сервак, а Денвер |
новые сборки денвера без апача - уже сегодня..спешите.
_____________
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
5.06.2013 - 11:28
Не надо тролить! Все и так понимают, что такое Апач!
Денвер стоит на моей машине, а не сервере хостера!
Вопрос по "нехватке памяти" и непоняткам в связи с этим!
Ибо памяти выделено 6Гб, а PHP пишет, что надо 1.8Гб.
Но PHP все равно "чего то не хватает" ...
Хотелось разобраться, какого лешего
PHP получил 6Гб, а для обработки файла ему
надо 1.8Гб и все равно PHP говорит что ему
не хватает памяти ...
Игорь_Vasinsky
5.06.2013 - 12:03
надо Вася - НАДО!
_____________
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
, скорее всего у тебя физически нет столько свободной памяти, и тут не важно хоть 100500G в конфиге напиши.
Попробуй memory_limit=-1
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
5.06.2013 - 13:09
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
5.06.2013 - 13:20
для начала я вижу синтаксическую ошибку тут: ini_set('memory_limit', ‘600000M’);
во-вторых, неплохо бы проверить, установилось ли новое значение (читаем мануал ini_set)
в-третьих, после "уникализации" не уничтожается старый массив, хотя далее по коду он не используется, итого оверхед более 2 раз
действуй
PS. $un = $stroka; - это вообще непонятно для чего
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
killer8080
5.06.2013 - 14:41
Цитата (forroboform @ 5.06.2013 - 10:28) |
Вопрос по "нехватке памяти" и непоняткам в связи с этим! Ибо памяти выделено 6Гб, а PHP пишет, что надо 1.8Гб. |
Где оно выделено?
Цитата (forroboform @ 5.06.2013 - 08:58) |
ini_set('memory_limit', ‘600000M’); |
600000M - это 600ГБ, а не 6

(про синтаксическую ошибку выше уже сказали)
Цитата (forroboform @ 5.06.2013 - 08:58) |
.htaccess php_value memory_limit 60000M |
тут уже по скромнее, всего 60ГБ, у тебя там что, денвер на супер компьютере запущен
forroboform
6.06.2013 - 16:50
Хорошо!
Спрошу по другому!
Дайте рецепт для этого:
Папка с 5000 файлами (файл может быть и 2 мб и 2гб.)
Файлы нужно считать, объединить и удалить дубликаты строк.
Сохранить в один файл уникальные строки.
Invis1ble
6.06.2013 - 16:52
если предполагаются объемы в 2 ГБ, то наверное стоит написать спец. утилиту на каком-нибудь C, ИМХО.
Ну или в корне пересмотреть логику приложения, т.к. файлы в 2 ГБ как-то не очень
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.