Когда я проверить веб-сервер mod_status/сервер-статус, я заметил, что там куча нитей в состоянии ..reading ..Apache потоков не останавливается в состоянии ..reading .. до http.conf значение TimeOut достигается
Выполнение Трассирование на нитку это то, что на самом деле происходит, когда поток находится в ..reading ..
...
...
semop(327681, {{0, 1, SEM_UNDO}}, 1) = 0
gettimeofday({1452260985, 867058}, NULL) = 0
getsockname(156, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("172.31.9.248")}, [16]) = 0
fcntl(156, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(156, F_SETFL, O_RDWR|O_NONBLOCK) = 0
gettimeofday({1452260985, 867479}, NULL) = 0
read(156, 0x558f4c26e9d8, 8000) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=156, events=POLLIN}], 1, 300000) = 1 ([{fd=156, revents=POLLIN}])
read(156, "", 8000) = 0
gettimeofday({1452261254, 669634}, NULL) = 0
gettimeofday({1452261254, 669691}, NULL) = 0
shutdown(156, SHUT_WR) = 0
poll([{fd=156, events=POLLIN}], 1, 2000) = 1 ([{fd=156, revents=POLLIN|POLLHUP}])
read(156, "", 512) = 0
close(156) = 0
read(6, 0x7fff901f67e7, 1) = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1452261254, 670341}, NULL) = 0
semop(327681, {{0, -1, SEM_UNDO}}, 1) = 0
...
...
когда нить в ..waiting .. Трассирование останавливается на следующей строке:
poll([{fd=156, events=POLLIN}], 1, 300000) = 1 ([{fd=156, revents=POLLIN}])
Значение конфигурации apache для «Timout» в этом случае равно 30, что отражает значение «300000». Это ожидаемое значение таймаута, опускающее значение конфигурации, изменит значение, показанное выше, и это сделает тайм-аут быстрее.
Из моих новых знаний в использовании strace мне кажется, что он пытается получить сокет для поиска внутреннего IP-адреса. Но это не удается. Настройка «HostnameLookups» отключена.
Проверка нашей производственной среды показывает, что она имеет одинаковые шаблоны, когда Apache останавливается в .reading .., но затем он показывает шаблон адреса IPV6.
Пример:
getsockname(154, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::ffff:172.31.3.239", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0
И затем останавливается на "опроса", а затем получить "(Тайм-аут)", как в приведенном выше примере.
Но есть ли какой-то вход, почему он останавливается .. ожидание ..?
Осталось ли сообщение «Ресурс временно недоступным»?
Если это имеет значение, Apache работает на экземплярах EC2 позади ELB в облаке Amazon.
Обновление: Вот изображение того, как производственный сервер смотрит прямо сейчас с состояниями потоков. Много .. .. Image of Apache thread states
Мы также запускаем большое количество VirtualHosts на серверах, если это дает нам понять, почему это происходит.
Ближайший поток на World Wide Web I фонд с той же проблемой, это одна: http://apache-http-server.18135.x6.nabble.com/Apache-Hangs-Server-Status-shows-all-Reading-td4751342.html
Удивительно, но в чем же причина, которая должна быть исправлена. Я знаю, что он пытается найти какой-то IP-адрес, но что не отвечает. И кто спрашивает, можно ли отключиться. То есть этот вызов действительно необходим. Как упоминалось выше, HostnameLookups отключены. Что еще тогда делает то же самое? – JoGi
А, см. Приведенную выше проблему предложения. Предложение должно быть больше похоже на: «Может ли кто-нибудь помочь мне, почему он останавливается .. ожидание ..» :) – JoGi
Коренной причиной чего? Это реализация таймаута чтения. Здесь нет никаких проблем. – EJP