Производительность приложения PHP - PullRequest
1 голос
/ 11 января 2012

Сначала я хочу сказать, что я использую Drupal в качестве CMS, и я знаю, что есть отдельный сайт для обмена стеками Drupal. Но моя проблема не связана с Drupal, она не на уровне пользователя или опытного пользователя. Это связано с PHP и сервером. ОК, теперь проблема.

Я разработал сайт, который еще не запущен. Выбираюсь из памяти ошибок случайных времен. И иногда сервер выходит из строя. Помогает перезагрузка. Там нет других людей, использующих приложение, так что нет большой нагрузки. В частности, я превышаю установленный лимит. Я пробовал некоторые общие вещи - увеличение / уменьшение предела памяти PHP, просмотр журналов ошибок, ведение журнала медленных запросов MySQL. Ничего ... То же самое.

Я выполнил команду 'top' linux. Существует 4-5 процессов Apache в зависимости от запросов браузера. Какой MEM использование (%) составляет 10, 5, 4, 3, 0,5. два процесса работают> 10 часов. После перезапуска apache я получил + 40% свободной памяти.

Вот несколько вопросов и загадок для меня.

  1. Почему эти два процесса выполняются так долго, когда нет активного запроса от браузера? И как я могу их предотвратить?
  2. Почему я получил + 40% свободной памяти после перезапуска, когда у меня было 10 + 5 + 4 + 3 + 0,5 памяти, используемой apache? Это не должно быть равным?
  3. Может ли это быть утечка памяти? Как я могу их обнаружить?
  4. Какие приемы мне следует использовать для перехода с более высоких уровней на низкие? Представьте, что у меня есть «утечка памяти» в одной из моих функций, как мне получить его во всем приложении?
  5. Как я могу сравнить свои функции для использования памяти и процессора?
  6. Почему происходит сбой сервера? Даже при простом перезапуске httpd возвращается «fork: Cannot to memory». Может ли это быть признаком утечки памяти?

Пожалуйста, ответьте по пунктам.

1 Ответ

1 голос
/ 11 января 2012

Звучит так, как будто у вас где-то бесконечный цикл или вы не высвобождаете ресурсы при работе с такими вещами, как GD.

Linux хранит вещи в ОЗУ, пока есть свободный ОЗУ, если есть внезапная необходимость от другогопроцесс для оперативной памяти, а оперативная память не используется, Linux освободит / заменит его для нужного приложения.Проверьте вывод «free», и вы заметите кешированный столбец, который указывает, сколько всего кэшировано и может быть выпущено в любое время.

...