|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||||||||||||||||
Зависание порта14.09.2015, 12:05. Показов 716. Ответов 4
Метки нет (Все метки)
Может ли подвиснуть сокет? а точнее весь порт. То есть чтение из любого нового сокета подключенного к порту перестанет работать.
Запущено 8 потоков где открыто по epoll дескриптору на поток (epoll_create). ОС Debian x64. Клиентов порядка 150-150 крутиться. Сегодня сервер завис. Я не присутствовал и не видел что было точно, его ребутнули, но судя по логам, в один момент всех юзеров выкинуло из за отсутствия входящих пакетов от клиентов. Есть основной поток, в котором в цикле происходит добавление всех подключенных юзеров из очереди в единый массив. Каждый и потоков сокетов занимается только принятием и отправкой данных. При принятии пакета он помещается в массив СокетСессион. Потом раз в 50мс перебор всех юзеров и проверка наличия пакетов. если за 8 секунд не было пакетов то дисконт. Вообщем после двух суток работы, сервер перестал принимать пакеты, и я точно не знаю не читались ли вообще данные, или что то ещё, но я вижу по логам что все новые клиенты через 8 секунд отключались из за отсутствия пакетов. Зависание потоков исключено, так как дисконект проходил нормально судя по логам. То есть что бы получить дисконект, сначала должен основной цикл пометить сокет как закрытый, и только потом сокет удаляется уже из потока в котором он слушается. Да собственно и добавление не работало бы. Пока всё что приходит в голову, это то что по какйо то причине стало невозможно читать данные из сокетов. Лог выглядет так Кликните здесь для просмотра всего текста
.... происходит добавление сессий в разные потоки ... 13-09-2015 09:09:05 Debug: SocketSession create 13-09-2015 09:09:05 Debug: SocketThread::NewConnection(34) size(4) 13-09-2015 09:09:05 Debug: Socket onConnect 13-09-2015 09:09:05 Info: SocketThread::NewConnection 13-09-2015 09:09:05 Debug: Socket create (61) 13-09-2015 09:09:05 Debug: SocketSession create 13-09-2015 09:09:05 Debug: SocketThread::NewConnection(61) size(5) 13-09-2015 09:09:05 Debug: Socket onConnect 13-09-2015 09:09:05 Info: SocketThread::NewConnection 13-09-2015 09:09:05 Debug: Socket create (62) 13-09-2015 09:09:05 Debug: SocketSession create 13-09-2015 09:09:05 Debug: SocketThread::NewConnection(62) size(5) 13-09-2015 09:09:05 Debug: Socket onConnect 13-09-2015 09:09:05 Info: SocketThread::NewConnection 13-09-2015 09:09:05 Debug: Socket create (63) 13-09-2015 09:09:05 Debug: SocketSession create 13-09-2015 09:09:05 Debug: SocketThread::NewConnection(63) size(5) 13-09-2015 09:09:05 Debug: Socket onConnect 13-09-2015 09:09:05 Info: SocketThread::NewConnection 13-09-2015 09:09:05 Debug: Socket create (64) 13-09-2015 09:09:05 Debug: SocketSession create 13-09-2015 09:09:05 Debug: SocketThread::NewConnection(64) size(5) ... тут удаление сокетов добавленных ранее ... ... если небыло активности > 8 сек то удаление сокетов ююю 13-09-2015 09:09:14 Debug: SocketThread: eleteSocket(64) size(4)13-09-2015 09:09:14 Debug: Socket destroy (64) 13-09-2015 09:09:14 Debug: SocketThread: eleteSocket(63) size(4)13-09-2015 09:09:14 Debug: Socket destroy (63) 13-09-2015 09:09:14 Debug: SocketThread: eleteSocket(62) size(5)13-09-2015 09:09:14 Debug: Socket destroy (62) 13-09-2015 09:09:14 Debug: SocketThread: eleteSocket(61) size(5)13-09-2015 09:09:14 Debug: Socket destroy (61) 13-09-2015 09:09:14 Debug: SocketThread: eleteSocket(34) size(4)Кусок чтения Кликните здесь для просмотра всего текста
То есть в m_recv_queue пакеты не попадают. все три функции обрабатываются в одном потоке. в m_recv_queue методы push и pop защищены мьютексом. но зависание точно не там, ибо оно работало несколько месяцев, а потом в в течении нескольких десятков минут ни один пакет не попал в очередь. то есть всё это время коннектились новые клиенты и не один пакет не прошел. Всё что приходит в голову
Может ли как то зависнуть порт. Добавлено через 12 часов 9 минут Может это как то быть связанно с таким закрытием сокета?
Хотя вряд ли... клиенты то разные, и когда с тем же номером дескриптора клиент новый подключается, ошибок же нет, что данные не те пришли в начале сессии...
0
|
||||||||||||||||
| 14.09.2015, 12:05 | |
|
Ответы с готовыми решениями:
4
Зависание программы из-за COM порта QSerial и зависание COM порта Чтение из COM порта, При чтении из порта зависает read() |
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,456
|
||||
| 16.09.2015, 09:46 | ||||
|
Добавлено через 1 минуту ...как вариант - по каким-то причинам ОС исчерпала запас сокетов и/или соединений и все сокеты отвалились Добавлено через 1 минуту ..а вообще надо бы знать точно какой кусок кода умер
1
|
||||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|||||||||||||||||||||||||||||||
| 16.09.2015, 12:27 [ТС] | |||||||||||||||||||||||||||||||
|
а можно поподробней про штатное закрытие. всё что я знаю, это акцепт 100% срабатывает и дескриптор сокетов по логам вижно в сокбочках дальше он попадает в
epfd в каждом потоке свой. а для слущающего сокета в мейт потоке свой.
0
|
|||||||||||||||||||||||||||||||
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,456
|
|||
| 16.09.2015, 13:52 | |||
|
с epoll не работал может в нем загадка...
1
|
|||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|
| 16.09.2015, 13:59 [ТС] | |
|
Ну дескрипторы освобождаются, да и закрытия там простого нет как я уже говорил выше, всегда обрыв конекта из за закрытия флеша.
Вообщем буду ждать когда ещё такое произойдёт, может более подробные логи помогут...
0
|
|
| 16.09.2015, 13:59 | |
|
Помогаю со студенческими работами здесь
5
Зависание оконного приложения при прослушке порта
Зависание Зависание ПК
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|