Симофор19 рф: Знакомьтесь, сенатор Александр Коровников. Передача телеканала «Вместе-РФ»

EPICS Re: Не удается создать семафор мьютекса: слишком много

1994 1995 г. 1996 г. 1997 г. 1998 г. 1999 г. 2000 г. 2001 г. 2002 г. 2003 г. 2004 г. 2005 г. 2006 г. 2007 г. 2008 г. 2009 г. 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023 Индекс 1994 г. 1995 г. 1996 г. 1997 г. 1998 г. 1999 г. 2000 г. 2001 г. 2002 г. 2003 г. 2004 г. 2005 г. 2006 г. 2007 г. 2008 г. 2009 г. 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023
<== Дата ==> <== Тема ==>

Субъект : Re: Не удается создать семафор мьютекса: слишком много
Из : Майкл Дэвидсавер через Tech-talk anl.gov>
: «Лучини, Кристи Л.» , Тилль Штрауманн
Копия : EPICS Tech-Talk , Джоэл Шеррилл , «Mock, Jeremy A»
Дата : Ср, 25 мая 2022 г. 21:19:49 -0700
 Я веду техническое обсуждение, так как думаю, что эти цифры могут заинтересовать других.
(хотя, вероятно, это не 11-мегабайтное вложение screenlog.0, из которого они получены)
25.05.22 19:07, Лучини, Кристи Л. писал(а):
 
 Всем привет!
К сожалению, мне пришлось перезагрузить iocs, потому что это создавало проблемы для операций. Тем не менее, я предварительно сформировал episMutexShowAll(0,1), как рекомендовал Тилль.
Я приложил файл screenlog
Хотя это не является окончательным и, возможно, даже не относящимся к делу, здесь есть несколько интересных моментов.
Во-первых, общее количество используемых мьютексов.
 
 $ grep epicMutexId /tmp/screenlog.0 |wc -l
1409
 
Номера строк предполагают минимум исправлений, специфичных для SLAC...
 
 $ grep epiicsMutexId /tmp/screenlog.0 |awk '{print $4, $6}'|sort|uniq -c|sort -nr
    318 ../db/dbScan.c 597
 
scanIoInit() вызывался 106 раз любыми драйверами
загружены. Каждый список сканирования имеет три мьютекса для каждого из
три приоритета обратного вызова.
https://github.com/epics-base/epics-base/blob/34834dfe973a577f342503441e7b33b7fe322de5/modules/database/src/ioc/db/dbScan.c#L596
 
 246 ../misc/iocInit.c 500
 
Загружено 246 записей.
https://github.com/epics-base/epics-base/blob/34834dfe973a577f342503441e7b33b7fe322de5/modules/database/src/ioc/misc/iocInit. c#L500
 
 246 ../db/dbLock.c 87
 
Эти 246 записей находятся в 246 наборах замков.
Это означает, что между записями нет ссылок на БД.
https://github.com/epics-base/epics-base/blob/34834dfe973a577f342503441e7b33b7fe322de5/modules/database/src/ioc/db/dbLock.c#L87
 
 193 ../dbStatic/dbPvdLib.c 119
 
Эти 246 записей занимают 193 блока в хеш-таблице.
используется во время поиска имени PV.
https://github.com/epics-base/epics-base/blob/34834dfe973a577f342503441e7b33b7fe322de5/modules/database/src/ioc/dbStatic/dbPvdLib.c#L119
 
 126 ../../src/remote/beaconHandler.cpp 24
 
На данный момент получены маяки от 126 серверов.
С учетом проблемы pvAccessCPP, которую я выделил, этот номер
будет неограниченно расти по мере (пере)запуска большего количества серверов.
(по крайней мере, для программных IOC, где меняется номер порта)
 
 46 . ./db/dbEvent.c 379
 
Есть активные подписки на 46 PV.
Это число будет увеличиваться и уменьшаться по мере подключения и отключения клиентов.
https://github.com/epics-base/epics-base/blob/34834dfe973a577f342503441e7b33b7fe322de5/modules/database/src/ioc/db/dbEvent.c#L379
 
 23 ../freeList/freeListLib.c 55
 
Активны 23 свободных списка.
 
 21 ../osi/epicsThread.cpp 208
 
Работает 21 поток С++.
Это число будет увеличиваться/уменьшаться по мере (отключения) подключения клиентов PVA.
Мне уже скучно, и я не буду проходить длинный хвост.
 
 12 ../../src/remote/blockingUDPTransport.cpp 69
     10 ../db/dbScan.c 897
     10 ../db/dbEvent.c 300
     10 ../db/dbEvent.c 290
      9 ../rsrv/caservertask.c 1267
      9 ../rsrv/caservertask.c 1266
      9 ../rsrv/caservertask.c 1265
      9 ../rsrv/caservertask.c 1264
      9 ../cxxTemplates/tsFreeList.h 114
      7 . ./../src/pva/pv/pvaDefs.h 23
      7 ../../../../../include/tsFreeList.h 114
      4 ../timer/timerQueue.cpp 28
      4 ../../src/remoteClient/clientContextImpl.cpp 3982
      4 ../devSeqCar.c 154
      3 ../../src/remote/channelSearchManager.cpp 86
      3 ../gpHash/gpHashLib.c 57
      3 ../db/dbCa.c 326
      3 ../ca_client_context.cpp 63
      3 ../ca_client_context.cpp 62
      2 ../../src/remote/pv/transportRegistry.h 68
      2 ../../src/misc/timer.cpp 34
      2 ../../src/client/pv/pvAccess.h 1530
      2 ../../src/client/client.cpp 238
      2 ../repeaterSubscribeTimer.cpp 40
      2 ../log/logClient.c 466
      2 ../hostNameCache.cpp 34
      1 ../tpool.cpp 20
      1 ../timer/timerQueueActiveMgr.cpp 23
      1 ../taskwd/taskwd.c 151
      1 ../taskwd/taskwd.c 150
      1 ../taskwd/taskwd.c 1491 ../../src/utils/configuration.cpp 244
      1 ../../src/server/serverContext.cpp 48
      1 ../../src/remote/blockingTCPAcceptor.cpp 38
      1 ../../src/misc/reftrack.cpp 31
      1 .
./../src/misc/reftrack.cpp 164 1 ../../src/factory/FieldCreateFactory.cpp 1627 1 ../../src/factory/ChannelAccessFactory.cpp 100 1 ../seq_cmd.c 38 1 ../save_restore.c 2244 1 ../rsrv/caservertask.c 485 1 ../PVAServerRegister.cpp 42 1 ../pvalink_channel.cpp 18 1 ../../p2pApp/weakmap.h 74 1 ../osi/os/posix/osdSock.c 38 1 ../osi/osiNTPTime.c 91 1 ../osi/osiClockTime.c 82 1 ../osi/os/default/osdThreadHooks.c 38 1 ../osi/epicsGeneralTime.c 94 1 ../osi/epicsGeneralTime.c 91 1 ../osi/devLibVME.c 711 1 ../misc/ipAddrToAsciiAsynchronous.cpp 174 1 ../misc/epicsExit.c 80 1 ../iocsh/iocsh.cpp 81 1 ../iocsh/initHooks.c 40 1 ../evrTime.c 456 1 ../ошибка/errlog.c 485 1 ../ошибка/errlog.c 482 1 ../ошибка/errlog.c 481 1 ../drvMrfEr.c 929 1 ../drvEvr.c 406 1 ../devIocStatsAnalog.c 465 1 ../dbmf/dbmf.c 80 1 ../db/dbScan.c 552 1 ../db/dbNotify.
c 320 1 ../db/dbLock.c 63 1 ../db/dbCa.c 278 1 ../db/dbBkpt.c 2591 ../cxxTemplates/epicsSingletonMutex.cpp 35 1 ../ca_client_context.cpp 53 1 ../as/asTrapWrite.c 71 1 ../as/asLibRoutines.c 83 1 ../ас/асСа.с 235 1 /afs/slac.stanford.edu/g/lcls/vol8/epics/base/R7.0.3.1-1.0/include/pv/pvAccess.h 1401
 
 Спасибо,
-Кристи
-----Исходное сообщение-----
От: Майкл Дэвидсавер 
Отправлено: 25 мая 2022 г., 14:15.
Кому: Тилль Штрауманн ; Лучини, Кристи Л. <лучини на slac.stanford.edu>
Копия: Talk EPICS Tech ; Джоэл Шеррилл 
Тема: Re: Не удается создать семафор мьютекса: слишком много
25.05.22, 08:35, Майкл Давидсавер написал:
 
 25.05.22 01:03, Тилль Штрауманн написал:
 
 Привет, Кристи.
Жаль, что я могу смотреть на это только после долгого времени.
Список мьютексов действительно очень и очень длинный, и поэтому
сообщение о том, что больше не может быть создано, кажется законным.
Я считаю, что ваша проблема может быть вызвана алгоритмом, который leeks mutexs, т. е. мьютекс создается, какая-то операция завершается ошибкой и этот процесс повторяется без разрушения мьютекса.
Действительно, похоже, это так. Существует std::map, используемый для отслеживания того, какие серверы PVA отправили маяки. Записи добавляются, но никогда не удаляются.
Каждая запись имеет мьютекс (этот код выполняет очень детальную блокировку...).
Я не могу быть уверен, что это является причиной того, что сообщает Кристи, но это кажется вероятным виновником.
https://github.com/epics-base/pvAccessCPP/issues/184
Может пройти какое-то время, прежде чем я успею вникнуть в это. Если кто-то еще хочет попробовать первым, я предлагаю начать с добавления поведения LRU.
BeaconHandler::beaconNotify() уже передано (но игнорирует) текущее время.
Затем удаляйте старые записи по мере поступления новых маяков с учетом макс. size и/или периодически удалять записи для серверов, которые не отправляли маяки в произвольное время (как это делает PVXS).
https://github.com/mdavidsaver/pvxs/blob/f22ab94458abb9ed58af0582e88cf1b2b40ed52a/src/client.cpp#L1084-L1121
 Мне не удалось найти код, который выдает «Ошибка при UDP RX xxx -> xxx».
Его нет ни в одном из источников RTEMS или EPICS, которые у меня все еще есть.
мой компьютер.
 
Это конкретное сообщение исходит от pvAccessCPP. Те, кто видели
ранее в логе этого не было. Я несколько удивлен, что прием
Пакет UDP приведет к выделению мьютекса/семафора. Однако,
этому коду трудно следовать (слишком много вызовов виртуальных функций, на мой вкус).
https://github.com/epics-base/pvAccessCPP/blob/f72c7e653c607f95daa818d
14dfc928d59cfe8ff/src/remote/blockingUDPTransport.cpp#L283-L284
 
Было бы полезно, если бы вы могли определить код, который генерирует указанное сообщение. Если анализ не дает никаких подсказок, вам может понадобиться молоток побольше (например, взлом кода episMutex для присоединения стека проследить до каждого мьютекса запись того, как он был создан. Как только проблема происходит, вы смотрите на эти трассировки стека, а затем вы можете увидеть, если мой гипотеза верна, т. е. действительно существует какая-то петля/повторяющаяся шаблон и следы также указывают на код, который заслуживает тщательного изучения).
Первое, с чего нужно начать, это запустить "epicsMutexShowAll(0,1)" (например, из
iocsh) Надеюсь, это даст какой-то намек.
Код episMutex пытается отслеживать файл+строку, где каждый
был выделен мьютекс. например. почему episMutexCreate() является макросом C.
Хотя это может быть скрыто кодом-оболочкой.
 
 #define episMutexCreate() episMutexOsiCreate(__FILE__,__LINE__)
 
 
 ХТХ
- До
10.05.22 20:44, Лучини, Кристи Л. написала:
 
9nd lan port, и мы не смогли использовать RF из-за этой ошибки. Так что я не знаю, является ли это новой проблемой, но я не называю это появлением в версии RTEMS 4.9.4, но я еще раз проверю у Сони, так как это ее IOC. Это странно, потому что этот ioc мало что делает… он загружает эпический модуль BsaCore, и была ошибка, которая вызывала сбой, когда у вас не было ни BSA pvs, ни EVR. У этого ioc нет bsa pvs, но есть EVR. В любом случае этот двоичный файл включает исправление ошибки для ядра BSA. Я прикрепил файл screenlog.0 с рекомендуемой вами командой rtemsMonitor(). С уважением, * Кристи *От:* Тилль Штрауманн *Отправлено:* Понедельник, 9 мая, 2022 23:45 *Кому:* Джоэл Шеррилл ; Майкл Дэвидсавер ; Лукини, Кристи Л. <лучини на slac.stanford.edu> *Копия:* Talk EPICS Tech *Тема:* Re: Не удается создать семафор мьютекса: слишком много Приложение GeSys настроено на неограниченное количество семафоры и в случае beatnik/mvme6100 15 МБ CONFIGURE_EXECUTIVE_RAM_SIZE. (https://github.com/till-s/rtems-gesys/blob/master/config.c, для битника определено MEMORY_HUGE). Если монитор rtems загружен (убедитесь, что модуль ‘monitor. obj’ загружается до того, как вы столкнетесь с проблемой, поскольку монитор создает в как минимум один семафор для собственного использования; IIRC стандартный запуск сценарии в SLAC действительно загружают монитор), то вы можете вызвать монитор из оболочки cexp и дамп информации о семафорах cexpsh> rtemsMonitor() монитор> сема (обратите внимание, что у монитора есть собственный интерпретатор с синтаксисом, отличается от cexpsh; выйти из монитора, набрав «выход») монитор> выход cepxsh> Странно – за много лет работы в SLAC я ни разу не видел этой проблемы… ХТН – До 10.05.22 в 04:14 Джоэл Шерил через Tech-talk написал: В понедельник, 9 мая, 2022 г., 19:41 Майкл Дэвидсавер написал: 09.05.22 в 16:42 Джоэл Шерил написал: > > > В понедельник, 9 мая 2022 г., 17:45 Майкл Дэвидсавер через Tech-talk > написал: > >     22.05.2015, 15:08, Лучини, Кристи Л. через Tech-talk написала: >      > Здравствуйте, >      > >      > У меня есть ioc MVME6100, на котором работает RTEMS, и, похоже, возникла проблема с ресурсами. Кто-нибудь узнает эти сообщения об ошибках ниже и случайно знает вызов функции, который я могу добавить в st.cmd, чтобы увеличить этот ресурс? Нужно ли мне увеличивать число файловых дескрипторов? >      > >      > Если я перезагружу ioc, сообщение исчезнет, ​​и iocs будет работать нормально, но через некоторое время, примерно через месяц, это сообщение снова появится, и вы не сможете получить доступ к pvs через CA, что, я полагаю, связано с тем, что iocs кажется, слишком занят, извергая сообщения об ошибках. >      > >      > Будем признательны за любую помощь. > >     Похоже, где-то произошла утечка ресурсов, по крайней мере, семафоров RTEMS. >     Я не уверен, что упоминание “файлового дескриптора” реальный, или случай >     перегрузка значения кода ошибки. > >     Какие драйверы и другой код загружаются? > >     Создают ли какие-либо из них рабочие потоки после iocInit() ? > >     Зарегистрированы ли какие-либо более ранние сообщения об ошибках? > >     Вы можете попробовать запустить “epicsThreadShowAll()”, чтобы проверить, некоторые потоки драйверов >    слоняются без дела, когда не должны. > >     К сожалению, “epicsMutexShowAll” отсутствует. реализовано для RTEMS 4.X, и >     Я не знаю, включают ли ваши сборки RTEMS RTEMS оболочка и все что с ней связано >     функции диагностики. > > > Я не знаю, какие параметры конфигурации RTEMS используются, но есть вариант для неограниченного и еще один для унифицированного рабочего пространства. Если они оба настроены, у вас есть один пул памяти, из которого можно выделить все. Сюда входят объекты RTEMS и то, что вы выделяете с помощью malloc() и new. В этой конфигурации любая утечка будет плохой и может привести к этому. Это был бы просто вопрос о том, что создать или выделить не удалось. Malloc() вернет NULL в этой ситуации, и это часто не проверяется на наличие ошибок. @джоэл, мне 90% уверены, что Кристи использует GESYS Тилля приложение, который имеет другую конфигурацию RTEMS. Итак, следующее не актуально для @SLAC. Все еще. к вашему сведению. Текущие конфигурации RTEMS 7.0 по умолчанию для приложений EPICS: для RTEMS  <= 4. x, в котором используются отдельные пулы. https://github.com/epics-base/epics-base/blob/cbae8d37b3da486ac8a68a
 d6ef9d2028cd98cca0/modules/libcom/RTEMS/score/rtems_config.c#L29-L38
 Я думаю, что для 4.10 логика cpp устанавливает единое рабочее пространство. Если я правильно помню, это первая версия с такой функцией.
 для RTEMS >= 5.x, который устанавливает CONFIGURE_UNIFIED_WORK_AREAS
 
https://github.com/epics-base/epics-base/blob/cbae8d37b3da486ac8a68a
 d6ef9d2028cd98cca0/modules/libcom/RTEMS/posix/rtems_config.c#L64-L7

 Это использует 64 максимальных файловых дескриптора, в то время как предыдущий
имели гораздо большее число. Но 64 все равно много. Вы не должны бежать
вне. :)
 Кристи.. каковы параметры конфигурации для максимального/неограниченного и унифицированного рабочего пространства.
 Я почти уверен, что унифицированное рабочее пространство впервые появилось в версии 4. 10.
 --джоэл
 > --Джоэл
 >
 >
 >
 >      > Спасибо,
 >      >
 >      > Кристи
 >      >
 >      > Сообщение от RTEMS ioc:
 >      >
 >      > Невозможно создать семафор мьютекса: слишком много
 >      >
 >      > Невозможно создать семафор мьютекса: слишком много
 >      >
 >      > Невозможно создать семафор мьютекса: слишком много
 >      >
 >      > Невозможно создать семафор мьютекса: слишком много
 >      >
 >      > [электронная почта защищена]>
 >      >
 >      > [email protected]>Ошибка при приеме UDP
172.27.72.43:47591 
 -> 172.27.75.255:5076
  в 46:
Не удается создать семафор мьютекса: слишком много
 >      >
 >      > episMutex::mutexCreateFailed()
 >      >
 >      > 0x00 ca024000 27000000 d5b37962 00000000 [электронная почта защищена] '... ..yb ....
 >      >
 >      > 0x10 c84f9922 00740000 00000000 00000000  .O." .t.. .... ....
 >      >
 >      > 0x20 0000ffff 00000000 d3130374 6370ff    . ... .... ...t cp.
 >      >
 >      > CAS: Ошибка принятия клиентом: Слишком много открытых файлов в
система (16)
 >      >
 >      > Ошибка UDP RX 172.27.72.99:37311
  ->
172.27.75.255:5076 
 в 46: Не удается создать семафор мьютекса:
Очень много
 >      >
 >      > episMutex::mutexCreateFailed()
 >      >
 >      > 0x00 ca024000 27000000 a5a77862 00000000 [электронная почта защищена] '... ..xb ....
 >      >
 >      > 0x10 ea850c38 004f0000 00000000 00000000  ...8 .O.. .... ....
 >      >
 >      > 0x20 0000ffff 00000000 d3130374 6370ff    .... .... ...t cp.
 >      >
 >      >   * Кристи
 >      >
 >
 
 
 
 
 

Каталожные номера:
RE: Не удается создать семафор мьютекса: слишком много Лучини, Кристи Л. через Tech-talk
Re: Не удается создать семафор мьютекса: слишком много Майкл Дэвидсавер через Tech-talk
Re: Не удается создать семафор мьютекса: слишком много Джоэл Шерил через Tech-talk
Re: Не удается создать мьютекс-семафор: слишком много Майкл Дэвидсавер через Tech-talk
Re: Не удается создать семафор мьютекса: слишком много Джоэл Шерил через Tech-talk
Re: Не удается создать семафор мьютекса: слишком много Тилль Штрауманн через Tech-talk
Re: Не удается создать семафор мьютекса: слишком много Тилль Штрауманн через Tech-talk
Re: Не удается создать семафор мьютекса: слишком много Майкл Дэвидсавер через Tech-talk
Re: Не удается создать семафор мьютекса: слишком много Майкл Дэвидсавер через Tech-talk

Навигация по дате:
Предыдущая: Re: Не удается создать семафор мьютекса: слишком много Майкл Дэвидсавер через Tech-talk
Далее: Re: Не удается создать семафор мьютекса: слишком много Майкл Дэвидсавер через Tech-talk
Индекс: 1994 г. 1995 г. 1996 г. 1997 г. 1998 г. 1999 г. 2000 г. 2001 г. 2002 г. 2003 г. 2004 г. 2005 г. 2006 г. 2007 г. 2008 г. 2009 г. 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023
Навигация по теме:
Предыдущая: Re: Не удается создать семафор мьютекса: слишком много Майкл Дэвидсавер через Tech-talk
Далее: Re: Не удается создать семафор мьютекса: слишком много Майкл Дэвидсавер через Tech-talk
Индекс: 1994 г. 1995 г. 1996 г. 1997 г. 1998 г. 1999 г. 2000 г. 2001 г. 2002 г. 2003 г. 2004 г. 2005 г. 2006 г. 2007 г. 2008 г. 2009 г. 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023
ANJ, 14 сентября 2022 г. · Дом · Новости · О · База · Модули · Расширения · Распределения · Скачать ·
· Поиск · ЭПИКС V4 · ИРМИС · Разговаривать · Ошибки · Документы · Ссылки · Лицензирование ·

команда семафора – github.

com/kamilsk/semaphore/cmd/semaphore – пакеты Go

ПРОЧТИ МЕНЯ ¶

🚦 cmd/семафор

семафор обеспечивает возможность параллельного выполнения терминальных команд.

Концепция
 $ создание семафора 2
$ семафор добавить -- сборка докера
$ семафор добавить -- бродить вверх
$ семафор добавить -- ansible-playbook
$ ожидание семафора --timeout=1m --notify
 

Документация
 Использование: семафор КОМАНДА
Семафор обеспечивает функциональность для параллельного выполнения команд терминала.
Команды:
create — это команда для инициализации контекста семафора.
  -отлаживать
    показать трассировку стека ошибок
  -строка имени файла
    абсолютный путь к контексту семафора (по умолчанию "/tmp/semaphore.json")
add — это команда для добавления задания в контекст семафора.
  -отлаживать
    показать трассировку стека ошибок
  -редактировать
    переключиться в режим редактирования для чтения аргументов из ввода (еще не реализовано)
  -строка имени файла
    абсолютный путь к контексту семафора (по умолчанию "/tmp/semaphore. json")
ожидание — это команда для выполнения задачи семафора.
  -отлаживать
    показать трассировку стека ошибок
  -строка имени файла
    абсолютный путь к контексту семафора (по умолчанию "/tmp/semaphore.json")
  -поставить в известность
    показать уведомление в конце (еще не реализовано)
  -скорость
    скорость вывода отчета (символов в секунду)
  -продолжительность тайм-аута
    таймаут для выполнения задачи (по умолчанию 1м0с)
Версия 4.0.0 (фиксация: ..., дата сборки: ..., версия go: go1.9, компилятор: gc, платформа: darwin/amd64)
 
Сложный пример
 $ семафор создать 2
$ семафор добавить -- bash -c "cd /tmp; \
    git clone [email protected]:kamilsk/semaphore.git \
    && cd семафор \
    && echo 'семафор в ревизии' \$(git rev-parse HEAD) \
    && rm -rf /tmp/семафор"
$ семафор добавить -- bash -c "cd /tmp; \
    git clone [email protected]:kamilsk/retry.git \
    && повторить попытку \
    && echo 'повторить попытку с ревизией' \$(git rev-parse HEAD) \
    && rm -rf /tmp/повторить"
$ семафор ждать
 
Установка
Заварка
 $ заварка установка kamilsk/tap/semaphore
 
Binary
 $ export REQ_VER=4. 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *