Pregunta

Escribo la aplicación Scala que usa muchos archivos DB de Kyotocabinet (necesito abrir 500-3K Little Kyotocabinet Archiles a la vez).
Pero después de 512 Archivos de DB abierta (creados) Tengo un error "Error: Success: No Error", y el nuevo archivo DB no crea.
Después de googling, encontré un problema similar con Tokyo Gabinete + Java aquí: https://groups.google.com/forum/#!msg/tokyocabinet-users/ve6osrm_hyu/hxc7795iqpsj Pero sin solución.
Entonces, ¿cuál es el trato?¿Cómo puedo abrir más archivos de Kyotocabinet en una sola aplicación?¿Puede estar allí hay algún error en Kyotocabinet?

¿Fue útil?

Solución

OK parece que encontré la respuesta para mi pregunta ... Este no es un problema específico de Java o Scala, sino un kyotocabinet
Primero intento reproducir este comportamiento en otro idioma.Así que escribí el programa de prueba usando Perl, y también falla, pero con un mensaje más informativo: Terminado llamado después de arrojar una instancia de 'Std :: runtime_error'
que (): pthread_key_create

Después de eso, obtuvo fuentes de Kyotocabinet e investigó que para cada objeto de archivo de Kyoto () se creó el objeto Tsdkey especial, y este objeto crea PTHREAD_KEY.Por defecto uno El proceso puede crear un número limitado de estas teclas, y este número definido en PTHREAD_KEYS_MAX.
Por lo tanto, parece que abrir más de 512 archivos Kioto DB en un proceso no es posible :(

Otros consejos

Sí, hice un intento.Aumentar el valor de macro pthread_keys_max resolverá el problema.

Estoy usando Ubuntu 16.04, con LiBC versión 2.23.libpthread es un complemento de libc.

  1. Descargar código de código fuente de http:// ftp.gnu.org/gnu/glibc/glibc-2.23.tar.bz2 .

  2. MODIFICAR MACRO PTHREAD_KEYS_MAX DE 1024 A 2048. No seas demasiado grande.He intentado 10240, pero el programa de prueba se estrelló.

  3. Modificar el valor de MaxCro en el sistema Incluya el archivo local_lim.h, y reemplace las bibliotecas del sistema con su nueva versión.

  4. Rebuild Kyotocabinet.

  5. Copia libpkyotocabinet.so y libpthread.so.0 a la ruta del programa de prueba.

  6. Exportar ld_library_path=. /

  7. Ejecutar su programa de prueba.El número de archivos MAX DB se duplicó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top