Мне пришлось установить CloudLinux, чтобы я мог в некоторой степени контролировать использование процессора и, что более важно, одновременные соединения, которые используют веб-сайты. Но, как вы можете видеть, нагрузка на сервер слишком высока, и поэтому некоторые сайты занимают до 10 секунд. загружать!
Сервер:
Вчера: 214 514 просмотров страниц (Awstat).
Теперь мой вопрос: могу ли я перенести часть использования ЦП на ОЗУ?
Или что еще я мог сделать, чтобы сайты работали быстрее (сайты динамические - поэтому SQL тяжелый)
Спасибо
top - 06:10:14 up 29 days, 20:37, 1 user, load average: 11.16, 13.19, 12.81
Tasks: 526 total, 1 running, 524 sleeping, 0 stopped, 1 zombie
Cpu(s): 42.9%us, 21.4%sy, 0.0%ni, 33.7%id, 1.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8146632k total, 7427632k used, 719000k free, 131020k buffers
Swap: 2104504k total, 132k used, 2104372k free, 4506644k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
318421 mysql 15 0 1315m 754m 4964 S 474.9 9.5 95300:17 mysqld
6928 root 10 -5 0 0 0 S 2.0 0.0 90:42.85 kondemand/3
476047 headus 17 0 172m 19m 10m S 1.7 0.2 0:00.05 php
476055 headus 18 0 172m 18m 9.9m S 1.7 0.2 0:00.05 php
476056 headus 15 0 172m 19m 10m S 1.7 0.2 0:00.05 php
476061 headus 18 0 172m 19m 10m S 1.7 0.2 0:00.05 php
6930 root 10 -5 0 0 0 S 1.3 0.0 161:48.12 kondemand/5
6931 root 10 -5 0 0 0 S 1.3 0.0 193:11.74 kondemand/6
476049 headus 17 0 172m 19m 10m S 1.3 0.2 0:00.04 php
476050 headus 15 0 172m 18m 9.9m S 1.3 0.2 0:00.04 php
476057 headus 17 0 172m 18m 9.9m S 1.3 0.2 0:00.04 php
6926 root 10 -5 0 0 0 S 1.0 0.0 90:13.88 kondemand/1
6932 root 10 -5 0 0 0 S 1.0 0.0 247:47.50 kondemand/7
476064 worldof 18 0 172m 19m 10m S 1.0 0.2 0:00.03 php
6927 root 10 -5 0 0 0 S 0.7 0.0 93:52.80 kondemand/2
6929 root 10 -5 0 0 0 S 0.3 0.0 161:54.38 kondemand/4
8459 root 15 0 103m 5576 1268 S 0.3 0.1 54:45.39 lvest
Проблема, очевидно, в веб-приложении, которое вы используете. Из top
вывод кажется, что вы запускаете какой-то PHP-код. Вам необходимо выяснить, какая часть кода PHP вызывает проблему (напрямую или через доступ к базе данных).
Если пример top
вывод описывает обычную ситуацию, я предполагаю, что какая-то часть ваши процессы блокируют друг друга на уровне приложений (какой-то конфликт блокировки).
Я делаю это на основании следующих фактов: низкий IO ждать время ( wa
данные в top
вывод), 33% простоя системы и высокая нагрузка. Это означает, что вы не используете все процессоры и не ждете ввода-вывода. В этом случае единственный способ сделать систему «слишком медленной» - сделать процессы последовательными (один процесс ожидает на ЦП №2, пока другой процесс не завершится на ЦП №1). Это происходит только при наличии более или менее явной блокировки между разными процессами. Если вы действительно не можете удалить межпроцессную блокировку, то единственный вариант - вложить средства в более быстрые ядра ЦП вместо нескольких медленных ядер. Ваш процессор уже довольно близок к первому уровню, поэтому я сначала рассмотрю код.
Вы спросили, можно ли использовать ОЗУ для уменьшения загрузки ЦП. Это возможно при агрессивном кэшировании, но только код приложения (PHP), который вы запускаете, может использовать этот компромисс. Опять же, вам нужно профилировать и изменять код PHP. Нет волшебного переключателя, который бы сказал: используйте больше памяти, меньше процессора, пожалуйста.
Вам нужно выяснить, что создает такую большую нагрузку. Возможно, ваш сервер загружен несколькими задачами с интенсивным использованием ЦП или перегрузкой ввода-вывода.
В случае интенсивного ввода-вывода базы данных вы можете попробовать увеличить кеш базы данных - innodb_buffer_pool в mysql или shared_buffers в postgres.
РЕДАКТИРОВАТЬ: Ваш top
вывод показывает, что ваша проблема связана с неоптимизированными запросами mysql. Если вы умеете управлять базами данных - узнайте медленные запросы и создайте соответствующие индексы или перепишите sql-запросы, чтобы устранить узкое место в процессоре mysql. Если это невозможно - купите более мощный процессор.
Я понятия не имею, что вы имеете в виду под «переносом использования процессора в оперативную память», но что бы вы ни имели в виду, по всей вероятности, это не сработает.
Вам необходимо выяснить, какие на самом деле узкие места замедляют работу вашего приложения. Это может включать