Назад | Перейти на главную страницу

Нарушил ли я пределы своего текущего VPS или есть место для оптимизации?

В настоящее время я использую mediatemple DV server (базовый) с выделенной оперативной памятью 512 МБ, это VPS на базе CentOS с Plesk и Virtuozzo. Мой опыт работы с ним с первого дня был плохим, и я мог решить проблемы с моим сервером только с помощью нескольких кэширующих "пластырей", но мои сайты не такие маленькие, как год назад, поэтому проблемы усугубились.

У меня есть 3 установки Drupal, запущенные на отдельных (plesk) доменах, 1 из этих установок drupal - это мультисайт, состоящий из 5-6 сайтов, 2 из которых приносят реальный трафик. Те кэширующие «пластыри», о которых я упоминал, - это APC, который, казалось, очень помог изначально, и Drupal Boost, который считается лаком для бедных, он делает все мои страницы статичными для анонимных пользователей. Совокупная оценка за последние 30 дней в Google Ananlytics: 90 тыс. Посетителей 260 тыс. Просмотров страниц.

Проблема: много простоев, я постоянно проверяю, работают ли мои сайты, и в последнее время я обнаружил, что они не работают более 3 раз в день. Перезапуск Apache вернет его на некоторое время. Я ищу в Google каждое сообщение об ошибке и искал способы оптимизировать мой DV-сервер, и я не понимаю, каков мой следующий шаг. Является ли этот сервер плохим, я столкнулся с недопустимо низким ограничением, таким как барьер памяти ядра 12 МБ (kmemsize), это на моей стороне, мне нужно еще немного оптимизировать?

* Я предоставил как можно больше информации ниже, мы будем благодарны за любую предоставленную помощь или предложения

Общие сообщения об ошибках, которые я вижу в журнале:

[error] (12)Cannot allocate memory: fork: Unable to fork new process
[error] make_obcallback: could not import mod_python.apache.\n
Traceback (most recent call last):
 File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 21, in ?
 import traceback
 File "/usr/lib/python2.4/traceback.py", line 3, in ?
 import linecache
 ImportError: No module named linecache
[error] python_handler: no interpreter callback found.
[warn-phpd] mmap cache can't open /var/www/vhosts/***/httpdocs/*** - Too many open files in system (pid ***)
[alert] Child 8125 returned a Fatal error... Apache is exiting!
[emerg] (43)Identifier removed: couldn't grab the accept mutex
[emerg] (22)Invalid argument: couldn't release the accept mutex

cat / proc / user_beancounters:

Version: 2.5
       uid  resource           held    maxheld    barrier      limit    failcnt
     41548: kmemsize        4582652    5306699   12288832   13517715   21105036
            lockedpages           0          0        600        600          0
            privvmpages       38151      42676     229036     249036          0
            shmpages          16274      16274      17237      17237          2
            dummy                 0          0          0          0          0
            numproc              43         46        300        300          0
            physpages         27260      29528          0 2147483647          0
            vmguarpages           0          0     131072 2147483647          0
            oomguarpages      27270      29538     131072 2147483647          0
            numtcpsock           21         29        300        300          0
            numflock              8          8        480        528          0
            numpty                1          1         30         30          0
            numsiginfo            0          1       1024       1024          0
            tcpsndbuf        648440     675272    2867477    4096277    1711499
            tcprcvbuf        301620     359716    2867477    4096277          0
            othersockbuf       4472       4472    1433738    2662538          0
            dgramrcvbuf           0          0    1433738    1433738          0
            numothersock         12         12        300        300          0
            dcachesize            0          0    2684271    2764800          0
            numfile            3447       3496       6300       6300       3872
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            numiptent            14         14        200        200          0

TOP: (В январе средняя нагрузка была действительно высокой 3-10, мне удалось снизить ее до уровня, который есть сейчас, предоставив APC больше памяти для игры)

top - 16:46:07 up  2:13,  1 user,  load average: 0.34, 0.20, 0.20
Tasks:  40 total,   2 running,  37 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.3% us,  0.1% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    916144k total,   156668k used,   759476k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

MySQLTuner: (после оптимизации каждой таблицы и восстановления любой таблицы с избытком я получил фрагментированный отсчет до 86)

[--] Data in MyISAM tables: 285M (Tables: 1105)
[!!] Total fragmented tables: 86

[--] Up for: 2h 44m 38s (409K q [41.421 qps], 6K conn, TX: 1B, RX: 174M)
[--] Reads / Writes: 79% / 21%
[--] Total buffers: 58.0M global + 2.7M per thread (100 max threads)
[!!] Query cache prunes per day: 675307
[!!] Temporary tables created on disk: 35% (7K on disk / 20K total)

Вам не хватает памяти (ОЗУ).

Обновление до 1 или 2 ГБ должно дать массивный повышение производительности.

Похоже, это удвоит или утроит ваши расходы, поэтому вы можете посмотреть на других провайдеров VPS.

Обновление, скорее всего, решит ваши проблемы, но может и не понадобиться. Если вам удобно устанавливать что-то в Linux, вы можете:

  • перезапишите ваши файлы ядра Drupal5 или Drupal6 с помощью Pressflow - оптимизированный дистрибутив
  • установите Nginx в качестве веб-сервера (отлично работает с Drupal / Pressflow и имеет параметры кеширования)
  • установите Varnish поверх вашей коробки, это отлично работает, НО только с Pressflow / Drupal 7
  • Избавьтесь от (больших) накладных расходов на ресурсы вашей панели управления и используйте cli / что-то более легкое

Эгир действительно хорошо, но не идеально, если вы разрешаете (shell / ftp / php) доступ к различным сайтам другим лицам. Прочтите об этом, прежде чем это сделать. Существует «дистрибутив» от Omega8.cc, который собирает Aegir / Nginx с нуля, но имеет довольно радикальный подход и устанавливает всевозможные другие компоненты. Я бы не советовал, делай своими руками.

Короче говоря, Plesk / Apache2 потребляет много ресурсов по сравнению с Nginx / PHP-FPM / Aegir Throw Varnish-with-Pressflow в сочетании, и у вас будет гораздо меньшее использование памяти вместе с огромным увеличением скорости. Сам лак много ресурсов не ест.

Видя, что вы используете Virtuozo / Plesk, я предполагаю, что вы не можете удалить панель управления. Возможно, все еще было бы целесообразно использовать Varnish и / или Nginx и просто использовать Apache в качестве бэкэнда. Но я не уверен, я не специалист по панели управления, и вполне возможно, что вы даже не можете изменить порты, которые прослушивает ваш веб-сервер.

Вы можете выбрать более самостоятельный VPS (а не на основе Virtuozzo / OpenVZ, если возможно) и попытаться заставить Nginx и др. Работать над этим. Затем перенесите свои сайты через Aegir.

Если вы используете VPS только для сайтов Drupal, возможно, вам лучше запустить Aegir, чем полноценную панель управления, такую ​​как Plesk. Не знаю, сэкономит ли это ресурсы и насколько это возможно, но, возможно, стоит подумать.

Есть довольно много статей о том, как лучше всего оптимизировать Drupal, но они обычно включают в себя довольно много таранов. Эта коллекция хорошее начало. Но сначала убедитесь, что вы не используете ненужные модули.

Вы также можете решить, переносить ли MySQL на отдельный сервер (хотя, вероятно, не для Drupal, поскольку он имеет тенденцию довольно интенсивно использовать базу данных). И если большая часть вашего трафика предназначена для анонимных пользователей, возможно, стоит подумать о том, чтобы получить дополнительный сервер для запуска прокси-сервера кэширования и / или memcached.

Но дополнительная память на этом сервере, вероятно, является самым простым и лучшим решением. 512 МБ - это не так уж и много для объединенного сервера Web / MySQL, на котором работают довольно большие сайты Drupal.