Como verificar o uso de filas de maneira confiável?

2

Eu executo um servidor de teste para um software que depende do uso massivo de mqueues (Filas de mensagens POSIX). Eu aumentei os limites para um nível razoável e consegui trabalhar há muito tempo. No entanto, o número de testes (e suas linhas de trabalho) continua aumentando e os testes estão começando a falhar na criação de novas linhas, embora os limites não pareçam estar esgotados.

$ sudo mount -t mqueue none /mnt
$ cat /proc/sys/fs/mqueue/queues_max    # maximum mqueue count
65535
$ ls -1 /mnt | wc -l                    # current mqueue count
8445
$ ulimit -q                             # maximum bytes in mqueues
819200
$ du -s /mnt                            # current mqueues size
0       /mnt

Após uma falha na chamada para mq_open() , errno está definido como 24 que significa (de acordo com /usr/include/asm-generic/errno-base.h ):

#define EMFILE          24      /* Too many open files */

Portanto, verifiquei o limite de arquivos abertos, mas parece que não está esgotado também.

$ ulimit -n                             # file descriptors limit
1024
$ lsof -u $(whoami) | wc -l             # currently open files
306

Estas verificações estão corretas? Há algo mais que eu deveria verificar?

Analisei Como verificar o uso de ulimit , mas as verificações de uso parecem ser específicos de limites e linhas particulares não são mencionados aqui.

Como o comportamento de "mqueues" foi alterado ao longo do tempo devido a bugs minha versão do kernel é 4.1.13-rt15+ . Eu mesmo construí o kernel usando o patch em tempo real apropriado sem mais modificações. Eu não mudei o kernel recentemente (quando o problema começou a aparecer).

    
por Melebius 03.01.2018 / 11:30

0 respostas