我编写了scala应用程序,它使用了大量的Kyotocabinet文件(我需要一次打开500-3k的小kyotocabinet文件)。
但是,在512打开(创建) db文件后,我有一个错误" error :success: no error",并且没有创建新的db文件。
在谷歌搜索后,我发现东京内阁+ Java也有类似的问题:hyU/hXC7795iqPsJ,但没有解决方案。
那是怎么回事?如何在一个应用程序中打开更多的kyotocabinet文件?共同内阁里可能有什么问题吗?
发布于 2014-02-25 22:42:55
看来我找到了问题的答案..。
这不是Java或Scala的具体问题,而是共同内阁
首先,我试图用另一种语言再现这种行为。因此,我编写了使用Perl的测试程序,它也失败了,但是提供了更多的信息:
在引发“std::runtime_error”实例后调用终止
what():pthread_key_create
在此基础上,得到了kyoto的来源,并研究了每一个京都文件()对象创建的特殊TSDKey对象,并且这个对象创建了pthread_key。默认情况下,一个进程可以创建这个键的有限数量,这个数目是在PTHREAD_KEYS_MAX中定义的。
因此,似乎不可能在一个进程中打开超过512个京都db文件:
发布于 2017-09-27 11:14:19
是的,我试过了。提高宏PTHREAD_KEYS_MAX的价值将解决这个问题。
我使用的是Ubuntu16.04,libc版本为2.23。Libp线程是libc的加载项。
https://stackoverflow.com/questions/22023419
复制相似问题