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

Загрузка процессора Ubuntu Server 12.04

У меня есть сервер (2x Hexa-Core Xeon E5649 2,53 ГГц с HT с 32 ГБ ОЗУ и пропускной способностью 20000 ГБ) под управлением Ubuntu Server 12.04 LTS. Сервер работает под управлением LAMP и обслуживает только один веб-сайт, ориентировочное количество пользователей должно быть ~ 15 000 одновременно.

На данный момент у меня около 2000 онлайн-пользователей, каждый из которых выполняет 50 запросов MySQL (небольшие значения, в основном, выбирают и вставляют) с начала до конца сеанса. Загрузка ЦП сервера высока при таком количестве подключений, в то время как использование ОЗУ составляет почти 1 ГБ из 32 ГБ, стоит отметить, что сервер работал очень быстро без каких-либо проблем, но меня беспокоит средняя загрузка. http://s12.postimage.org/z7hi6mz3h/photo.png

top - 03:02:43 up 9 min,  2 users,  load average: 50.83, 30.14, 12.83
Tasks: 432 total,   1 running, 430 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 66.5%id, 33.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32939992k total,  3111604k used, 29828388k free,    84108k buffers
Swap:  2048280k total,        0k used,  2048280k free,  1621640k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                          
 2860 root      20   0 25820 2288 1420 S    3  0.0   0:11.18 htop                                                                                             
 1182 root      20   0     0    0    0 D    2  0.0   0:01.46 kjournald                                                                                        
 1935 mysql     20   0 12.3g 161m 7924 S    1  0.5 102:31.45 mysqld                                                                                           
   11 root      20   0     0    0    0 S    0  0.0   0:00.38 kworker/0:1                                                                                      
 1822 www-data  20   0  247m  25m 4188 D    0  0.1   0:01.81 apache2                                                                                          
 2920 www-data  20   0     0    0    0 Z    0  0.0   0:01.20 apache2 <defunct>                                                                                
 2942 www-data  20   0  247m  23m 3056 D    0  0.1   0:00.20 apache2                                                                                          
 3516 www-data  20   0  247m  23m 3028 D    0  0.1   0:00.06 apache2                                                                                          
 3521 www-data  20   0  247m  23m 3020 D    0  0.1   0:00.09 apache2                                                                                          
 3664 www-data  20   0  247m  23m 3132 D    0  0.1   0:00.09 apache2                                                                                          
 3674 www-data  20   0  247m  23m 3252 D    0  0.1   0:00.06 apache2                                                                                          
 3713 www-data  20   0  247m  23m 3040 D    0  0.1   0:00.09 apache2                                                                                          
    1 root      20   0 24328 2284 1344 S    0  0.0   0:03.09 init                                                                                             
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd                                                                                         
    3 root      20   0     0    0    0 S    0  0.0   0:00.01 ksoftirqd/0                                                                                      
    6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0                                                                                      
    7 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/0                                                                                       
    8 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/1                                                                                      
    9 root      20   0     0    0    0 S    0  0.0   0:00.00 kworker/1:0


root@server:~/codes# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
19  0      0 29684012  86112 1689844    0    0    19   590  254  231 48  0 47  5
23  0      0 29704812  86128 1697672    0    0     4   320 11100 8121 77  1 22  0
33  0      0 29671044  86156 1705308    0    0     0  5440 13190 9140 95  1  4  0
33  3      0 29670088  86160 1706288    0    0     0 32932 12275 7297 99  0  1  0
35  0      0 29693456  86188 1710724    0    0     4   676 12701 7867 98  1  1  0
^C

Я не менял ни одну из конфигураций по умолчанию, поставляемых с Ubuntu. Нормальна ли такая нагрузка для такого мощного сервера? Могу ли я оптимизировать Apache / MySQL, чтобы минимизировать нагрузку? Что вы порекомендуете ?

РЕДАКТИРОВАТЬ: СРЕДНЯЯ ЗАГРУЗКА на 52 !!!!!!! http://zertux.com/IMG_0117.PNG

**** ОБНОВЛЕНИЕ **** Оказывается, администратор базы данных не добавлял индексы в таблицы, после добавления индексов средняя загрузка резко упала с 93 до 1,2 :) Все супер, спасибо всем за помощь!

Мне кажется, это нормально.

У вас 12 ядер ... на двух 6-ядерных процессорах. Таким образом, при 100% производительности средняя загрузка должна быть 12.

Средняя нагрузка смешная. Я не думаю, что это означает то, что вы думаете.

Средняя нагрузка на самом деле является показателем того, сколько процессов выполняется одновременно, в среднем за 1, 5 и 15 минутные окна.

Мне кажется, ты немного перегружен, но не сильно.

Возможно использование http://mysqltuner.pl/mysqltuner.pl чтобы получить некоторое представление о том, как ваши настройки mysqld соответствуют реальным объемам использования.

Следующим логическим шагом, конечно же, является разделение MySQL и Apache на разные блоки. Я еще не уверен, что вы на этом уровне, потому что у вас еще есть штаны оперативной памяти, свободной для MySQL. Вы можете найти некоторую выгоду в увеличении кешей запросов и ключевых буферов и, вероятно, более внимательно изучить Журнал медленных запросов MySQLи посмотрите, сможете ли вы вообще оптимизировать таблицы.

Существует масса информации о том, как считывать средние значения нагрузки, и на самом деле более разумно разделить среднее значение нагрузки на количество ядер, чтобы вы имели некоторое представление о том, как на самом деле используется сервер.

Теперь я вижу, что у вас 33% iowait. Я подозреваю ... что у вас довольно большая база данных для записи, и это приводит к блокировке таблиц, когда вы пишете, а это означает, что одновременная запись невозможна.

Имея понюхал на my.cnf похоже, что max_connections довольно велико, но это не вызывает большого беспокойства, но это означает, что если вы используете их все, вам понадобится 27 ГБ ОЗУ, чтобы это разрешить. Это много, но опять же не большая проблема.

Рассматривать превращение на PHP APC Opcode кеширование.

** редактировать **

Теперь, просмотрев журнал запросов, я склонен думать, что есть несколько вещей, которые могут принести пользу серверу.

  1. Кэширование кода операции PHP APC (в целом делает apache более эффективным)
  2. Преобразуйте все таблицы в InnoDB, если у вас нет действительно хорошая причина. ЕСЛИ это причина полнотекстового поиска, найдите лучший способ сделать это и перейдите к InnoDB.
  3. Купите другой сервер и сделайте его выделенным хостом БД. Совместите его с дисками SAS и разделите на разделы, чтобы журналы и данные находились на отдельных шпинделях (или, скорее, в массивах RAID).

Без более глубокого понимания того, что, черт возьми, происходит, на самом деле сказать сложно.

Возможно, стоит попробовать NewRelic для PHP. Это бесплатно в течение месяца и дает хорошее представление о неприятных запахах кода.

Кроме того, я доступен для консультации;)

В вашем главном выводе есть одна поразительная особенность - это количество процессов в состоянии D. Хороший кусок apache2 и даже kjournald даже в состоянии D. Известно, что процессы состояния D увеличивают нагрузку на ЦП.

Чаще всего процесс переходит в состояние D, когда ожидает ввода-вывода. После получения IO он снова переходит в состояние R или состояние S из D. Следующее, что вы можете сделать для выполнения отладки в реальном времени, - это проверить, сколько времени выполняются эти процессы состояния D. Если на какое-то время проблема.

В любом случае, ваша проблема, если это высокая средняя нагрузка, заключается в IOwait, поскольку 33,1% - это значение iowait, указанное top. % usr и% sys не так уж и много, поэтому мы можем спокойно игнорировать тот факт, что процессы выходят из строя, либо процессор не работает, либо есть узкое место с памятью. Проблема, видимо, в iowait. Я в основном работаю с RHEL, поэтому я не уверен на 100% в Ubuntu и в наличии встроенных инструментов.

В основном я собираю несколько итераций top, vmstat в течение некоторого времени, iostat в течение некоторого времени (с соответствующими переключателями, которые показывают разрушение устройства), одну итерацию ps и ps -xv и проверяю их. Часто из этого можно сделать первый уровень отладки. Затем я мог бы собрать некоторые выходные данные oprofile, perf в зависимости от версии RHEL, но это уже другая история.

Независимо от этого, пожалуйста, проверьте все команды отладки одновременно, чтобы получить более детальное представление.

Я подозреваю, что процесс, возможно, ожидает ввода-вывода, что может привести к увеличению средней нагрузки. В конце концов, средняя загрузка зависит от очереди запущенных процессов для процессора. Видите ли вы какое-нибудь высокое значение в команде iostat?

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

Top не использовал процесс, который потребляет слишком много оперативной памяти или процессора. Но настораживает сервер Лаод и время ожидания процессора. Как и в вашем случае это 33%.

В моем случае проблема оказалась в компании, занимающейся хостингом серверов. Их SAN работала очень медленно в течение нескольких недель, прежде чем они наконец решили сменить хранилище. Только после того, как мой сервер заработал нормально.

У меня был VPS, а не выделенный сервер.

У меня была аналогичная проблема с настольной версией Ubuntu 12.04 (она использовалась в качестве сервера (не мой выбор)).

Если вы установили на своем компьютере диспетчер рабочего стола, вы можете обнаружить, что проблема заключается в vsync.

Unity dm вызывал у меня постоянно повышенную нагрузку на процессор, и я мгновенно отключил vsync, и это исправило. Я не знаю, вызывают ли эту проблему и другие DM.