PHP shell_exec испытывает таймаут, но не при ручном выполнении

В следующий раз, когда эта проблема происходит, я предложил бы выполнить некоторые захваты пакетов на двух рассматриваемых хостах, определить, какой трафик ARP каждый из них наблюдает.

Ваша машина HAproxy будет, скорее всего, иметь некоторый аромат tcpdump установленным. Для машины Windows Вам или будет нужно приложение WinPCAP, как Wireshark или Microsoft Network Monitor.

На самом деле, думая об этом, поскольку проблема, кажется, с ARP а именно, Вы могли потенциально просто непрерывно записывать весь трафик ARP на машине HAproxy и рассматриваемой машине Windows с прокручивающимся файлом получения (для пользы аргумента) 10 МБ. Это должно быть достаточно большое таким образом, что к тому времени, когда Вы обнаружили отказ, файл получения будет все еще содержать трафик ARP до отказа. (Стоит экспериментировать путем выполнения получения в течение приблизительно одного часа, видеть, сколько данных это генерирует).

Синтаксис получения в качестве примера для Linux tcpdump (примечание, у меня нет поля Linux удобным для тестирования этого на; протестируйте поведение-C и-W перед использованием в производстве!):

tcpdump -C 10 -i eth1 -w /var/tmp/arp.cap -W 1 arp

Это должно, надо надеяться, дать Вам некоторый признак того, что точно перестало работать. Когда запись ARP истекает (и в соответствии с этой статьей, более новые версии Windows, кажется, стареют 'неактивные' записи очень настойчиво), я ожидал бы, что следующее произойдет:

  1. Исходный хост отправит запрос ARP на целевой узел. Запросы ARP обычно широковещательно передаются, но в случае, где хост обновляет существующую запись, ARP может быть отправлен одноадресную передачу.
  2. Целевой узел ответит ответом ARP. 99% времени это будет одноадресно передано, но широковещательные ответы разрешений RFC. (См. также RFC относительно Обнаружения коллизий Адреса IPv4 для большего количества детали).

Простой, поскольку это звучит, существует набор других вещей, которые могут вмешаться в этот процесс:

  • Исходный запрос не может прибывать в цель.
  • Запрос может прибывать в цель, но ответ не может достигать источника.
  • Своего рода высоконадежный механизм может вмешиваться в 'нормальное' поведение ARP:
    • Как делает обработку отказа между работой узлов HAProxy? Это использует общий MAC-адрес, или это использует бесплатный ARP для обработки отказа IP-адреса между узлами?
    • Много MAC-адресов в приведенных выше таблицах ARP начинается с 00-15-5D, который, по-видимому, регистрируется к Microsoft. Вы используете какую-либо форму кластеризации или другого HA на рассматриваемой машине Windows? Действительно ли эти 00-15-5D MAC-адреса являются теми же, которые Вы видите связанный с аппаратными средствами NICs, когда Вы делаете 'ipconfig / все' на Windows Server?

Вещи проверить, происходит ли это снова:

  • Посмотрите на захваты пакетов трафика ARP; какая-либо часть разговора произошла, очевидно, не?
  • Проверьте таблицы образования моста/CAM переключателя; все рассматриваемые MAC-адреса отображаются на порты, к которым Вы ожидаете их?
  • Другие хосты на подсети имеют допустимые записи ARP для IP-адресов и Windows и хостов HAProxy?
  • Записи ARP для того же целевого IP на нескольких машинах другого источника решают к тому же MAC-адресу? т.е. войдите в систему нескольких других хостов на подсети и проверьте что 196,211 твердости к тому же MAC-адресу на обоих.

1
задан 22 April 2010 в 07:14
1 ответ

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

Если не среда, только начните проверять полномочия дважды.

0
ответ дан 4 December 2019 в 10:42

Теги

Похожие вопросы