Pergunta

Eu escrevo o aplicativo Scala que usa muitos arquivos DB de Kyotocabinet (preciso abrir 500-3k pequenos arquivos de kyotocabinet de uma só vez).
Mas depois de 512 abrir arquivos DB (criado), tenho um erro "Erro: Sucesso: sem erro", e novo arquivo DB não é criado.
Após googling, encontrei um problema semelhante com o Gabinete de Tóquio + Java aqui: https://groups.google.com/forum/#!msg/tokyocabinet-users/ve6osrm_hyu/hxc7795iqpsj mas sem solução.
Então, qual é o negócio?Como posso abrir mais arquivos de kyotocabinete em um aplicativo?Pode ser que há algum bug na Kyotocabinet?

Foi útil?

Solução

Ok parece que achei a resposta para minha pergunta ...
Esta não é uma questão java ou scala específica, mas um kyotocabinete
Primeiro eu tento reproduzir esse comportamento em outro idioma.Então eu penito o programa de teste usando Perl e falha também, mas com uma mensagem mais informativa:
Terminate chamado depois de jogar uma instância de 'std :: runtime_error'
o que (): pthread_key_create

Depois disso tem fontes de kyotocabinete e pesquisou que para cada arquivo kyoto () objeto específico do TSDKey criado, e este objeto crie Pthread_Key.Por padrão um O processo pode criar um número limitado dessas teclas, e esse número definido em Pthread_keys_max.
Então parece que abrir mais de 512 arquivos de DB de Kyoto em um processo não é possível :(

Outras dicas

Sim, eu tentei.Aumentar o valor de macro pthread_keys_max resolverá o problema.

Estou usando o Ubuntu 16.04, com a LIBC versão 2.23.libpthread é um add on of libc.

    .
  1. Baixe o código fonte de http:// ftp.gnu.org/gnu/glibc/glibc-2.23.tar.bz2 .

  2. modifique macro pthread_keys_max de 1024 a 2048. Não seja muito grande.Eu tentei 10240, mas o programa de teste caiu.

  3. Modifique o valor MaxCro no sistema Incluir arquivo local_lim.h e substitua as bibliotecas do sistema com sua nova versão.

  4. reconstruir kyotocabinete.

  5. cópia libkyotocabinet.so e libpthread.so.0 para o caminho do seu programa de teste.

  6. exportar ld_library_path=. /

  7. Execute seu programa de teste.O número de arquivos Max DB dobrou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top