Остатки семафоров на машине linux

при управлении большими серверами Linux я иногда вижу, что машины достигают своих пределов IPC, в частности, остатки семафоров:

Linux #ipcs -u | grep -B2 sema
------ Semaphore Status --------
used arrays = 1024
allocated semaphores = 3072

Linux #ipcs -l | grep -B2 sema
------ Semaphore Limits --------
max number of arrays = 1024
max semaphores per array = 250
max semaphores system wide = 256000
max ops per semop call = 32
semaphore max value = 32767

глядя на конкретный семафор, я вижу только последний процесс, получивший доступ к семафору:

Linux #ipcs -s -i  63636429

Semaphore Array semid=63636429
uid=11488322     gid=12460       cuid=11488322   cgid=12460
mode=0666, access_perms=0666
nsems = 3
otime = Mon Jul 14 16:02:09 2014  
ctime = Mon Jul 14 16:02:05 2014  
semnum     value      ncount     zcount     pid       
0          1          0          0          11551     
1          0          0          0          11551     
2          0          0          0          11551 

ни один из процессов не существует.

каков наиболее эффективный способ устранения проблемы и выяснить, почему семафоры не удалены должным образом?

другое, более общее вопрос: почему ОС не извлекает неиспользуемые семафоры способом, аналогичным потерянным процессам?

8
задан agoldis
09.03.2023 23:38 Количество просмотров материала 2420
Распечатать страницу

1 ответ

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

for semid in `ipcs -s | cut -d" " -f 2` ; do pid=`ipcs -s -i $semid | tail -n 2 | head -n 1 | awk '{print }'`; running=`ps --no-headers -p $pid | wc -l` ; if [ $running -eq 0 ] ; then ipcrm -s $semid ; fi ; done
2
отвечен user560296 2023-03-11 07:26

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх