coolwolf0 - Северный наблюдатель (coolwolf0) wrote,
coolwolf0 - Северный наблюдатель
coolwolf0

Categories:

Как дебагировать сокеты не привлекая внимания

Я тут уже почти третью неделю кряду пытаюсь разгадать секрет, почему зависает удалённый клиент при ЛЮБОМ подключении к некоему множеству линуксовых хостов.
Перепробованы аж два вида соединений - по RPyC и SSH. В обоих случаях, если контролируемый удалённо процесс бежит меньше часа, то клиентская сторона получает отчётливый сигнал о завершении. А вот стоит перейти границу часового ожидания, и всё - процесс на стороне сервера успешно отрабатывает, а клиент этого не видит и ждёт у сокета погоды (пока не помирает через собственный тайм-аут).

Дебагировать такую пакость при помощи дебаггера - штука опасная в том плане, что наблюдатель привносит в наблюдаемую систему очевидное крушение сценария: вместо обслуживания сокета, сервис будет ужасно долго чикаться с интерактивным дебаггером. Поэтому ВПС пошёл другим путём - подключил в "подозрительный" код трейсер pysnooper.
 (благо у RPyC серверная часть тоже на Пайтоне написана). Получилось прикольно (жалко, что не помогло - лажа оказалась на уровне сокета, а там никакой трейсер уже нифигашечки не видит). Тем не менее, если будете такие вещи дебагировать - попробуйте. Это реально удобная штука, хотя бы для вынесения вердикта "тут всё в порядке - проблемы где-то глубже", ибо исполняемый код можно натурально просмотреть глазами.

Кстати, просто анализируя код, мой коллега нашёл баг в RPyC версии 4.1.4 - если у кого тормозит при передаче данных, откатитесь на пару версий назад.
Tags: дыбр, программирование, работа
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments