BSDPORTAL.RU
http://www.bsdportal.ru/

Логирование Socket, чем и как?
http://www.bsdportal.ru/viewtopic.php?f=58&t=28977
Страница 1 из 1

Автор:  pepelxl [ Вс 06 окт, 2019 11:12 pm ]
Заголовок сообщения:  Логирование Socket, чем и как?

Здравствуйте, уровень знаний очень низкий. Помогите пожалуйста, с методом поиска неисправности. Имеется проблема, которую надо локализовать.
Установлен и запущен прокси(Privoxy), который теряет один конкретный пакет. В логах прокси висит запись о том что запрос обработан и отправлен в систему(write socket), но по факту запрос не уходит в сеть, Снифф сделанный tcpdump с этой машины чётко об этом говорит. Как можно локализовать проблему? Существует какой либо метод логированния, для записи того, что пришло на socket от privoxy?

Автор:  AMDmi3 [ Пн 07 окт, 2019 7:36 pm ]
Заголовок сообщения:  Re: Логирование Socket, чем и как?

ktrace, dtrace

Автор:  pepelxl [ Ср 09 окт, 2019 1:20 pm ]
Заголовок сообщения:  Re: Логирование Socket, чем и как?

спасибо, это то что нужно. Всё-равно нет понимания, что надо логировать. Воспользовался ktrace. Утилита показала, что прокси отработал верно, хотя встроенное логированние у прокси не честное.
проблемное место записанное ktrace по pid privoxy:
Код:
  1000 privoxy  CALL  write(0x7,0x28654960,0xc8)
  1000 privoxy  GIO   fd 7 wrote 200 bytes
       "GET /AccessLevelDictionary/list HTTP/1.1\r
Connection: Keep-Alive\r
Accept-Encoding: gzip\r
Accept-Language: en,*\r
User-Agent: Mozilla/5.0\r
Host: exemple.ru:8080\r
\r
       "
  1000 privoxy  RET   write 200/0xc8
  1000 privoxy  CALL  poll(0xbbbfcbe0,0x2,0x927c0)
  1000 privoxy  RET   poll 1
  1000 privoxy  CALL  poll(0xbbbfb7e0,0x1,0)
  1000 privoxy  RET   poll 1
  1000 privoxy  CALL  recvfrom(0x8,0xbbbfb7ee,0x1,0x2<MSG_PEEK>,0,0)
  1000 privoxy  GIO   fd 8 read 0 bytes
       ""
  1000 privoxy  RET   recvfrom 0
  1000 privoxy  CALL  poll(0xbbbfdf50,0x1,0)
  1000 privoxy  RET   poll 0
  1000 privoxy  CALL  close(0x7)
  1000 privoxy  RET   close 0

Я так понимаю, что прокси корректно отправил данные в 7 сокет.
Во всех остальных случаях после первого CALL poll идёт сразу вызов CALL read с ответом от сервера.
Получается, что ядро потеряло вызов. Что можно заснифить, что бы локализовать проблему?

Автор:  pepelxl [ Пн 14 окт, 2019 10:51 am ]
Заголовок сообщения:  Re: Логирование Socket, чем и как?

воспользовался truss, которая подписала больше байтиков. Прокси, похоже проигнорировал такой вызов:
poll({ 8/POLLERR|POLLHUP 9/POLLIN },2,600000) = 1 (0x1)
Но делу это не помогло.
Обратил внимание, что последовательность обработки данных в вызовах прокси и tcpdump не совпадают.
А проблема возникает только при загрузке приложения(при одиночном запросе всё в порядке).
Полез разбираться с сетевыми настройками фряхи, которые ни когда не менял.
Дело оказалось в параметре kern.ipc.somaxconn который по умолчанию установлен в 128.
Дело усугубилось тем, что начиная с 10 релиза этот аргумент как бы есть но не виден в системе.
Вместо него надо использовать kern.ipc.soacceptqueue.
В связи с этим вопрос: какими методами можно диффектовать такие проблемы?
Вызовы типа netstat, vmstat не эффективны в поиске проблемы.

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/