Мой сайт работает очень медленно, но загрузка ЦП составляет всего 25%

Мой сайт работает очень медленно, но загрузка ЦП составляет всего 25%

У меня есть 2 сервера для моего сайта:

  • Один сервер 256ГБ ОЗУ 20c/40t для MySQL
  • Один сервер 256ГБ ОЗУ 20c/40t для Apache

MySQL-сервер всегда в порядке (используется 30-50% ЦП).

Но сервер Apache становится СУПЕРМЕДЛЕННЫМ, когда мой сайт начинает получать 10 000 одновременных подключенных посетителей (5 000 страниц загружаются в минуту). Странно, что этот сервер еще не достигает своего предела, потому что загрузка памяти процессора составляет около 20-30%.

Вот что topвозвращает сервер Apache (когда сайт работает очень медленно и на нем 10 000 посетителей).

top - 22:04:17 up 22:34,  1 user,  load average: 12.61, 13.59, 13.47
Tasks: 2139 total,  20 running, 2119 sleeping,   0 stopped,   0 zombie
%Cpu(s): 28.2 us,  7.2 sy,  0.0 ni, 63.0 id,  0.0 wa,  0.0 hi,  1.6 si,  0.0 st
KiB Mem : 26410644+total, 17146396+free,  8632064 used, 84010416 buff/cache
KiB Swap:  1047548 total,  1047548 free,        0 used. 25449820+avail Mem

Как будто есть ограничение на загрузку ЦП этого сервера.

А это конфигурация сервера Apache:

keepalive: Off
keepalivetimeout: 2
maxclients: 3000
maxkeepaliverequests: 1000
maxrequestsperchild: 15000
maxspareservers: 300
minspareservers: 150
serverlimit: 3000
startservers: 1000
timeout: 300

И я должен уточнить, что вчера у меня было 128 GO RAM для сервера Apache, и веб-сайт мог поддерживать 13 000 одновременных подключенных посетителей, прежде чем он начал становиться супермедленным. Поэтому я решил перейти на 256 GO RAM, но результат оказался хуже...

Есть идеи?

Я использую WHM.

(Извините за мой английский)

решение1

«Директива MaxClients устанавливает ограничение на количество одновременных запросов, которые будут обслуживаться. Любые попытки соединения, превышающие ограничение MaxClients, обычно ставятся в очередь, вплоть до числа, определяемого директивой ListenBacklog. После освобождения дочернего процесса в конце другого запроса соединение будет обслуживаться» (Ref.http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients).

Если вы посмотрите глубже в соответствующие документы, вы найдете, как управлять также «serverlimit» и «maxrequestsperchild» в соответствии спрефорк/рабочийMPM, чтобы избежать ситуации, описанной Майклом Хэмптоном (очень наглядно!).

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

Связанный контент