Що робити після потрапляння в жахливі 256 максимум з'єднань Apache Limit


9

Почесавши голову, намагаючись зрозуміти, чому мій сайт реагує так повільно, хоча ресурси сервера добре, я нарешті перевірив стан Apache і виявив:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers

Виявляється, мій апаш буквально заповнений зв’язками. Кожен, хто намагається завітати на мій сайт, потрапляє до списку очікування, поки Apache знову не буде вільним.

Здається, у мене є два варіанти.

A) Підвищення максимальної межі з'єднання вище 256. Хоча згідно з цією статтею це не так просто:

За замовчуванням параметр MaxClients має компільований жорсткий ліміт 256. Це можна змінити, перекомпілювавши Apache. Деякі дистрибуції або хостингові компанії підвищують цей ліміт до дуже високого значення, наприклад 512 або навіть 1024, щоб впоратися з великими навантаженнями.

В) Знайдіть сценарії, які займають занадто багато часу. Мені це здається набагато складнішим, оскільки більшість апаратних процесів просто з'являються, а потім знову зникають. Крім того, на моїх сайтах PHP-сценарії оптимізовані досить добре ... і ще раз серверні ресурси чудово:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)

Який варіант (якщо будь-який з них) я обрав і як це зробити?

EDIT

Більше інформації: Версія сервера: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635

Конфігурація HTTP: http://pastebin.com/yBeLt6mP

Зразок часткового запиту: http://pastebin.com/vzUVDMPR

Увімкніть перемотування тексту, якщо папки-кошики виглядають дивними.


Стаття, яку ви цитували, становить ~ 6 років. Зміни програмного забезпечення. Дивіться відповідь Шейна.
Chris S

1
@ChrisS Ще більше застаріло - ліміт складеного входу був річчю 1.x (2.0 вийшов у 2002 році), а стаття навіть явно посилається на 2.0 документа.
Шейн Мадден

Відповіді:


10

Ця стаття неточна; MaxClientsВи можете підняти вище 256 при використанні MPM prefork (я вважаю, що Ви зараз використовуєте на основі Вашого опису проблеми). З документації :

Для серверів, що не мають потоку потоків (тобто prefork), MaxClientsперекладається на максимальну кількість дочірніх процесів, які будуть запущені для обслуговування запитів. Значення за замовчуванням - 256; щоб збільшити його, потрібно також підняти ServerLimit.

ServerLimitце той, який має важко складений ліміт, але він пройшов шлях, куди вам коли-небудь слід дістатися, без того, щоб ваш сервер потрапляв у якесь інше вузьке місце. Документація :

Існує жорсткий ліміт ServerLimit 20000компільованого на сервері (для префорка MPM 200000). Це покликане уникнути неприємних наслідків, спричинених друкарськими помилками.

Отже, якщо ви хочете підняти ліміт клієнта на щось на зразок 512, тоді:

MaxClients 512
ServerLimit 512

Ви також повинні ознайомитись з тим, який MPM ви використовуєте, оскільки MPM, крім префорка, краще для масштабу. Дивіться тут для отримання додаткової інформації.


Я бачу core.c і worker.c від запуску httpd -l. Я здогадуюсь це означає, що я працюю MPM працівника?
kmoney12

@hellohellosharp Дійсно - в цьому випадку, ви хочете налаштувати потенційно ваші MaxClients, ServerLimit, ThreadsPerChildі ThreadLimit. Чи можете ви надати поточну конфігурацію працівника httpd.conf?
Шейн Мадден

Так ... чи є небезпека публікувати це публічно? Сподіваємось, ні, ось це: pastebin.com/yBeLt6mP
kmoney12

Ні, жодних проблем у публікації більшості файлів httpd.conf. Просто переконайтеся, що у вас немає чогось дивного, як коментарі з паролями / іменами користувачів / тощо. Вони іноді повзуть у розділах конфігурації проксі тощо. Багато людей також люблять редагувати IP-адреси та доменні імена, лише щоб вони не привертали уваги
Chris S

1
модуль стану може показати вам ці деталі.
ETL

-1

Я б запропонував використовувати зворотний проксі, щось на зразок nginx або lighttpd може обробляти набагато більше з'єднань, ніж апаш. Залежно від того, як ваші сайти використовують htaccess, ви також можете повністю використовувати nginx / lighttpd з fcgi та forego apache.


4
Дійсно ?? Йому потрібно додати два рядки конфігурації, httpd.confі ваше рішення полягає в тому, щоб вирвати більшу частину програмного забезпечення, яке він працює і замінити його ?! Кожна частина програмного забезпечення має свої проблеми, але неосвічене неправильне використання викликає гірші проблеми.
Chris S

Зрештою, nginx може працювати з більш активними з’єднаннями, це залежить від OP, щоб вирішити, що використовувати, я просто висував свою пропозицію.
Шошоміга
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.