Неустранимая ошибка: недостаточно памяти, но памяти достаточно (PHP)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Неустранимая ошибка: недостаточно памяти, но памяти достаточно (PHP)

Сообщение Anonymous »

Поскольку мой вопрос становится все длиннее и длиннее, я решил переписать его целиком, чтобы сделать его лучше и короче.

Я запускаю свой сайт на выделенном сервере с памятью 8 ГБ. Я полностью осознаю, что мне нужно увеличить лимит памяти для настройки php.ini. Я установил его от 128M до 256M и до -1. Тем не менее проблема заключается в постоянстве.


Неустранимая ошибка: недостаточно памяти (выделено 786432) (попытка выделить 24576
байт) в D:\www\football\views\main.php в строке 81


Недостаточно памяти не имеет смысла, потому что там сказано только Выделено 786432 байта, и потребовалось еще 24576 байт.

786432 байта — это всего 768 килобайт, и это довольно мало.

< h2>Подсказки
  • Ошибка возникает в очень случайной строке. В строке номер 81 не всегда возникает ошибка.
  • В пиковое время Apache занимает всего около 500 МБ памяти. У меня еще осталось 6 ГБ.
  • Бесконечного цикла не существует.
  • Скрипт занимает 1 042 424 байта. Получение этого числа из echo Memory_get_peak_usage();
  • Набор результатов из MySQL небольшой (не более 12 строк, чисто текст, без BLOB-данных)
  • (Важно) Если я перезапускаю Apache раз в два дня, ошибка исчезнет. Обычно это происходит, когда Apache работает более 2 дней.
  • Я включил сценарий профилирования, и вы можете получить его здесь.
  • Это посвящено Сервер используется исключительно для запуска только одного веб-сайта. Этот веб-сайт имеет высокую посещаемость: в среднем 1000 посетителей каждую минуту. В часы пик одновременно к сайту будут обращаться от 1700 до 2000 посетителей.
Спецификации сервера


ОС: Windows 2008 R2, 64-разрядная версия

Процессор: Intel Core i5 — 4 ядра

Оперативная память: 8 ГБ

Apache 2.2

PHP 5.3.1

Хранилище: 2 жестких диска по 1 ТБ

Пропускная способность: 10 ТБ в месяц


Решение

Я наконец настроил и устранил проблему, и я хотел бы поделиться здесь тем, что я сделал для улучшить:
  • Код: Выделить всё

    favicon.ico
    отсутствовал, что нарушило работу моего механизма маршрутизации. Хотя мой движок маршрутов очень мал, но включение favicon.ico помогает уменьшить использование памяти, поскольку мой движок маршрутов не запускается. Он есть на большей части моего веб-сайта, но я забыл разместить его в этом новом разделе.
  • Ограничить MaxRequestPerChild помогает. На другом выделенном сервере мой MaxRequestPerChild ограничен. Для этого сервера я поставил 0. Всегда думал, что каждый скрипт изолирован. Допустим, мой скрипт занимает 800 КБ для запуска. По его завершению Apache или PHP должны освободить 800 КБ памяти. Кажется, это не так работает. Ограниченный MaxRequestPerChild помогает предотвратить утечку памяти путем создания нового процесса после ограниченного MaxRequestPerChild и старого процесса. Это моя новая настройка.

    Код: Выделить всё

    ThreadsPerChild      1500
    MaxRequestsPerChild  10000
    
  • Код: Выделить всё

    ob_flush();
    немного уменьшает память. Это не сильно помогает, но помогает любая оптимизация.
  • Я использовал xdebug, который никогда раньше не использовал, как предлагают люди, которые пытаются ответить на этот вопрос. вопрос. Я должен сказать, что это отличный инструмент, и я оптимизировал несколько вещей, чтобы он работал немного быстрее.
  • Я отключил несколько ненужных модулей Apache. Я пытаюсь отключить его один за другим и оставить на несколько дней для проверки, чтобы убедиться, что он работает идеально, прежде чем отключать другой. Теперь у меня отключены все ненужные расширения PHP.
  • Большая часть моего сценария на этом сервере использовалась традиционным способом (без шаблонов, без уровня базы данных, чистый PHP, HTML и устаревшая функция mysql_*). . Честно говоря, он работает очень быстро и использует очень мало памяти. Однако поддерживать скрипт непросто, поскольку веб-сайт становится длиннее. Я попытался преобразовать некоторые части веб-сайта в подходящую структуру (мою собственную крошечную структуру). Причина, по которой я использовал свою собственную структуру, заключается в том, что она крошечная (3 КБ на всю структуру и включает только то, что мне нужно).
  • Переход на IIS7.5 полностью решает эту проблему< /strong>.


Подробнее здесь: https://stackoverflow.com/questions/120 ... memory-php
Ответить

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

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»