Как уменьшить использование памяти mediawiki?

Хорошо, после воспроизведения всего этого несколько раз, я посмотрел на журналы ближе после каждого шага. Это показало и проблема с SID, и затем это поразило меня! У меня должен быть другой SID, когда Вы клонировали контроллер домена. В этой статье The Machine SID Duplication Myth by Mark Russinovich говорится, что Вам больше не нужно к NewSid. Это верно на основе статьи, которую я прочитал некоторое время назад. Однако это не применяется, если Вы работаете с AD DC, который некоторые комментарии, что статья предлагает.

Так, после восстановления нового нового VM с Server 2008 (вместо того, чтобы клонировать от исходного основного VHD с Сервером 2008). Все работает как ожидалось.

1
задан 17 January 2012 в 15:04
4 ответа

Моим первым советом было бы убедиться, что вы исправляете правильную проблему.

  • Отслеживайте использование памяти в течение разумного периода времени и смотрите, насколько оно увеличивается (и можно ли соотнести это с чем-то вроде увеличения трафика).
    • Если у вас уже есть мониторинг (например, Munin), вы должны увидеть тенденции памяти
    • В противном случае используйте sar (например, если он у вас уже настроен, sar -r -f / var / log / sa / sa17 предоставит вам сегодняшнюю информацию о памяти).

Определите, какие процессы на самом деле используют вашу память.

  • Возможно, ваша проблема не связана напрямую с MediaWiki. Хотя PHP может потреблять много памяти, MySQL и особенно Apache - хорошие кандидаты для значительного использования памяти.
    • Используйте top (или htop) или ps aux --sort -rss, чтобы увидеть, какие процессы потребляют больше всего памяти.
    • Если ваша проблема - PHP, вы можете добиться некоторого успеха, уменьшив memory_limit в php.ini

Уменьшите использование памяти Apache

  • От 20 до 30 процессов apache будут потреблять много памяти (вероятно, более 500 МБ)
  • Если вы можете, переключитесь с Apache на облегченный веб-сервер, такой как nginx или lighttpd. Они должны работать с большинством CMS, хотя некоторые конфигурации (например, с использованием файлов .htaccess) не поддерживаются.
  • Удалите расширения apache, которые вам не нужны - Apache загрузит почти полную копию самого себя - включая все расширения и т. Д. - в память для каждого обрабатываемого запроса.
  • Уменьшите количество серверных процессов, запускаемых Apache. Процессы Apache обычно начинаются с 10 МБ каждый и со временем могут увеличиваться до 30+ МБ каждый.
    • Если время простоя приемлемо, рассмотрите следующий подход (в противном случае просто оцените и сделайте математические вычисления):
      • Через несколько часов использования посмотрите на средний объем памяти, используемый вашими процессами Apache.
      • Остановите Apache и обратите внимание на используемую вами память - это должно сказать вам, сколько ваша операционная система и все запущенные службы (MySQL и т. Д.) необходимость. Перезапустите Apache.
      • Возьмите разницу между вашим общим объемом памяти и памятью, используемой вашей базовой системой, вычтите немного (как минимум 10%) для безопасности и разделите на средний размер процесса apache.
  • Установите низкие значения для StartServers, MinSpareServers, MaxSpareServers и MaxClients. Держите MaxClients меньше, чем число, которое вы вычислили выше, а другие значения еще ниже.
  • Установите MaxRequestsPerChild на ненулевое значение (100-300 должно быть хорошо)
  • При меньшем количестве серверных процессов вам не нужны никакие связаны слишком долго - поэтому убедитесь, что ваш KeepAliveTimeout низкий (10 секунд должно быть достаточно, возможно, меньше, не более 15 с - значение зависит от того, как используется ваш сайт)

В этом очень хорошем руководстве есть дополнительные предложения по оптимизации Apache для работы с малым объемом памяти.

У версии 17.2 меньше места, чем у 16.2?

  • На самом деле существует только 6 версий (16.2-16.5, 17.0-17.2) между ними, более того, второстепенные версии обычно являются обновлениями безопасности, поэтому я не ожидал бы серьезных изменений, за исключением, возможно, версии 17.0 (и быстрый взгляд на журнал изменений не предлагает каких-либо серьезных изменений в управлении памятью). Если вы действительно думаете, что это проблема, запустите виртуальную машину (например, с VirtualBox), установите две версии и запустите на них нагрузочный тест (ab, siege, httperf и т. Д.) - отслеживайте использование памяти и сравните результаты.
    • Если это PHP, генерируйте статические копии ваших страниц при их изменении и обслуживайте их.
    • Если ваша проблема связана с Apache, для обслуживания статических ресурсов все равно потребуется много памяти (хотя кеширование всегда полезно идея).
      • Вы можете использовать CDN для уменьшения количества запросов к статическим ресурсам, что должно помочь с использованием памяти в Apache.

Есть несколько далеко не идеальных вариантов, которые вы можете рассмотреть:

  • Использование легковесного сервера в качестве обратного прокси - это поможет со статическими запросами, а если они составляют большую часть ваших запросов, должно помочь с памятью (после правильной настройки Apache) - однако при запуске дополнительного сервера используется некоторая дополнительная память (и усложняется система).
  • Используйте слой кэширования, такой как Varnish - обычно он предназначен для запуска из памяти - с намерение обслуживать страницы быстрее за счет использования большего объема памяти - однако вы можете настроить его на использование файла в качестве кеша. Как и при использовании обратного прокси, это снизит нагрузку на серверную часть, но сам по себе потребует некоторой памяти - если вы готовы поэкспериментировать, вы можете увидеть, компенсирует ли выигрыш стоимость.
  • Убедитесь, что ваш кэш опкодов (например, APC) работает, и, возможно, используйте хранилище с резервной копией файла вместо памяти для хранения кеш.

Почему у меня запущены и apache httpd, и php5.cgi?

  • Вероятно, потому что вы используете FastCGI. Запросы для файлов PHP выполняются не Apache (как в случае с mod_php), а скорее интерфейсом CGI PHP. Вы можете обнаружить, что другой интерфейс CGI - PHP-FPM - предлагает лучшее управление ресурсами (его можно использовать с mod_fastcgi).

Есть ли простой способ узнать, какие части mediawiki используют больше всего оперативной памяти?

  • I ' Я предполагаю, что лучший способ добиться этого - отключить все, что вы можете (расширения / плагины и т. д.), и запустить нагрузочный тест. У вас может быть небольшой успех с некоторыми профилировщиками (например, XDebug), но я не ожидаю, что с результатами будет так легко работать (и обычно, как правило, больше в форме затраченного времени). Если выполнение ваших запросов занимает много времени, некоторые менеджеры процессов (например, PHP-FPM) предлагают функцию «slowlog».

Есть ли способ уменьшить количество загружаемых файлов? Мои веб-журналы заполнены выборками для user.gif, bullet.gif, external.png, document.png --- почему темы mediawiki не используют спрайты?

  • Вы можете посмотреть в Google mod_pagespeed - это поможет вам с минимизацией, оптимизацией изображений и т. д. - хотя для правильной настройки требуются некоторые усилия. Кроме того, вы можете изменять темы по своему вкусу или использовать другую тему. Убедитесь, что изображения и т. Д. Кэшируются браузерами вашего пользователя. Возможно уменьшить ведение журнала для определенных типов ресурсов (например, статических объектов)
5
ответ дан 3 December 2019 в 16:37

Если возможно, переключитесь с Apache на lighttpd или nginx. Они могут очень обслуживать ваш статический контент . Затем настройте что-то вроде FastCGI или fcgid для вашего динамического контента. Таким образом вы можете эффективно разделить статический и динамический контент и изолировать их друг от друга.

И да, я намеренно исключил веб-ссылки для каждого ключевого слова, которое я использовал; Погуглите их и решите, что вам подходит.

1
ответ дан 3 December 2019 в 16:37

Я бы посоветовал вам перейти от CGI / FastCGI к PHP-FPM + nginx. PHP-FPM поддерживает порождение пула интерпретаторов PHP и не порождает каждый отдельный интерпретатор для каждого запроса (что, я думаю, делает даже FastCGI).

Из моих собственных тестов я заметил, что потребление памяти упало минимум на 15% до 35 % в сочетании с хорошо настроенным оптимизатором байт-кода (я использую APC с хорошими результатами). Реальная сделка заключалась в том, чтобы уйти от Apache и FastCGI, поскольку пул рабочих apache порождал слишком много дочерних элементов, и каждый из них, в свою очередь, порождал интерпретаторы PHP, которые сразу после 4/5 дней приводили к нехватке памяти / подкачке с низкой производительностью.

Как было предложено выше, проанализируйте, что сейчас пожирает вашу память, Держу пари, что APC вызывает , что согласно этот пост

1
ответ дан 3 December 2019 в 16:37

Я могу подтвердить, что MediaWiki использует большую память, но только в том, что касается скомпилированного байт-кода PHP. Средство просмотра кэша APC показывает, что размер скомпилированного байт-кода составляет примерно 20 МБ после нескольких обращений. Байт-код для всех "обычных" сайтов (не использующих WordPress, Drupal или Joomla) меньше 1 МБ.

Затем реальное использование памяти, о котором сообщает PHP: быстрый тест показал, что загрузка страницы MediaWiki занимает всего около 5 МБ. память, которая почти такая же, как у Joomla. Некоторые более легкие системы управления контентом используют значительно меньше: примерно 1,8–3 МБ на загрузку страницы (конечно, в зависимости от сложности структуры страницы).

Что касается плохого использования памяти, я видел, что стандартная установка WordPress а предельно простая страница может использовать до 20-30 МБ памяти, с более сложными структурами страниц гораздо больше и довольно много процессорного времени. Итак, DreamHost действительно знает наиболее частую проблему.

0
ответ дан 3 December 2019 в 16:37

Теги

Похожие вопросы